编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   

 Wiki.Wiki.   博客博客   搜索搜索   图灵图灵   聊天室  成员成员 
 java. Trivia.
指数 -> java.
转到页面 1, 2  下一页
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 2005年10月3日星期一11:25 AM  帖子主题:Java Trivia

让我们看看居民Java Gurus真的有多好。 微笑

两个真或假测试。

在Java中,所有对象类型都通过引用传递。

java.没有指针。
赞助
赞助
赞助
赞助
Rizzix.




邮政发布: 2005年10月3日星期一:上午11:40  帖子主题:(没有主题)

真的。真的。 (虽然Java引用可以包含空值并重新分配,但它真的取决于您的指针/参考的定义。在我的书中,指针是您可以指导的某些东西,如c指针。)
WTD.




邮政发布: 2005年10月03日星期一11:55  帖子主题:(没有主题)

假和假。 微笑

java.:
上市 班级 Test
{
   上市 静止的 空白 main(细绳[] args)
   {
      细绳str... = “foo”;
      系统.出去.println.(str...);
      foo(str...);
      系统.出去.println.(str...);
   }

   上市 空白Foo(细绳 s)
   {
      s = "你好";
   }
}


相比于:

C ++:
#包括<string>
#包括<iostream>

空白Foo(STD.::str...ing& s)
{
   s = "你好";
}

main()
{
   std::str...ingstr..(“foo”);
   std::COUT. << str << std::终止;
   foo(str...);
   std::COUT. << str << std::终止;

   返回 0;
}


并存在指针。 微笑

请参阅nullpointerexception。 眨眼
Rizzix.




邮政发布: 2005年10月3日星期一:下午12:02  帖子主题:(没有主题)

我为你做了一个更好的一个..(每个人都可以自由回答..第一个给出正确的答案将获得200位)

现在这里是这个问题,解释了我为什么跟随代码结果为真:
java.:
细绳 s1 = “你好,世界”;
细绳 s2 = “你好,世界”;

S1 == S2; // 真的
Rizzix.




邮政发布: 2005年10月03日12:03 PM  帖子主题:(没有主题)

这很有趣,但两次你错了 眨眼

(是的,我知道它似乎是SOO,但它是不是,你刚刚碰巧选择了一个糟糕的例子(Java String对象)

解释:

首先让我们来看看你的代码
代码:
公共课程测试
{
   公共静态空白主(String[] args)
   {
      String str = "Foo";
      System.out.println(str);
      foo(str);
      System.out.println(str);
   }

   public void foo(String s)
   {
      s = "Hello";
   }
}


现在这是这笔交易..
当通过str到foo ..实际发生在foo内是这样的:
java.:
细绳S =foo
基本上,参考现在是foo ......所以如果你重新分配了一个新的对象,那么(“你好”)..这并不意味着你是infact重新分配foo对象“hello”。

更好的例子是这样(CUZ字符串是不可变的物体):

代码:
公共课程测试
{
   class A {
       private String str;
       public void setStr(String s) {
           str = s;
       }
       公共字符串ToString.() {
           return str;
       }
   }

   公共静态空白主(String[] args)
   {
      A obj = new A();
      a.setStr("foo");
      System.out.println(a);
      foo(a);
      System.out.println(a);
   }

   public void foo(A a)
   {
      a.setStr("Hello");
   }
}
WTD.




邮政发布: 2005年10月3日星期一12:13 PM  帖子主题:(没有主题)

引用:
S1和S2都实际上指向指针(Java进入巨大的痛苦以隐藏此事实),两者都指向相同的值。由于两个字符串可以在编译时确定为相同的值,因为java的字符串是不可变的,因为它只分配一次字符串。因此,两个指针都指向内存中的相同位置。

如果我们要通过连接手动构造字符串,Java编译器将无法(或不愿意)确定它们是否包含相同的值,因此我们最终在分配的内存中有两个不同的位置。由于==参考平等测试,因此它现在将失败。

从这个例子可以很容易地看出,==是在此处使用的高度不可靠的测试,并且应该使用“等于”方法重写代码。
Rizzix.




邮政发布: 2005年10月3日星期一12:15 PM  帖子主题:(没有主题)

同上。
WTD.




邮政发布: 2005年10月3日星期一:下午12:20  帖子主题:(没有主题)

Rizzix写道:
这很有趣,但两次你错了 眨眼

(是的,我知道它似乎是SOO,但它是不是,你刚刚碰巧选择了一个糟糕的例子(Java String对象)

解释:

首先让我们来看看你的代码
代码:
公共课程测试
{
   公共静态空白主(String[] args)
   {
      String str = "Foo";
      System.out.println(str);
      foo(str);
      System.out.println(str);
   }

   public void foo(String s)
   {
      s = "Hello";
   }
}


现在这是这笔交易..
当通过str到foo ..实际发生在foo内是这样的:
java.:
细绳S =foo
基本上,参考现在是foo ......所以如果你重新分配了一个新的对象,那么(“你好”)..这并不意味着你是infact重新分配foo对象“hello”。

更好的例子是这样(CUZ字符串是不可变的物体):

代码:
公共课程测试
{
   class A {
       public String str;
   }

   公共静态空白主(String[] args)
   {
      A obj = new A();
      a.str = "foo";
      System.out.println(a.str);
      foo(a);
      System.out.println(a.str);
   }

   public void foo(A a)
   {
      a.str = "Hello";
   }
}


你仍然困惑。将“a”传递到“foo”时,您将指针值复制到一个完全新的变量中。当然,你然后分配给对象的字段“a”指向,这会突破该字段。可悲的是Java缺乏“Const”的背景。

这与参考无关。

C ++:
#包括<string>
#包括<iostream>

str...uct A
{
   std::str...ingstr..;

   A() : str(“foo”) { }
};

空白Foo(A * A.)
{
   a->str = "你好";
} 

main()
{
   A *a = 新的 A;
   std::COUT. << a->str << std::结尾;
   foo(a);
   std::COUT. << a->str << std::结尾;

   返回 0;
}
赞助
赞助
赞助
赞助
Rizzix.




邮政发布: 2005年10月3日星期一12:24 PM  帖子主题:(没有主题)

不,我不困惑......你是......你在C ++中思考太多。
java.引用不像C ++参考..


也许这将解释一下:
代码:
字符串a ="abc";
system.out.println.(a);
字符串b = a;
B ="xyz";
system.out.println.(a);


注意只是因为我分配了b,a。并不意味着A已经改变为“XYZ”


注意:我还更新了我以前的示例以更好地代表我想要说的话。
WTD.




邮政发布: 2005年10月3日星期一12:27 PM  帖子主题:(没有主题)

我不是在思考c ++。它恰好是方便的,具有指针和引用。
Rizzix.




邮政发布: 2005年10月3日星期一12:29 PM  帖子主题:(没有主题)

我告诉你Java引用不像C ++参考。他们指向对象但它们无法指向物理地址。

事实是.. C ++引用更像是名称别名。
WTD.




邮政发布: 2005年10月03日12:33 PM  帖子主题:(没有主题)

Rizzix写道:
代码:
字符串a ="abc";
system.out.println.(a);
字符串b = a;
B ="xyz";
system.out.println.(a);


注意只是因为我分配了b,a。并不意味着A已经改变为“XYZ”


是的,你有两个指针:“a”和“b”。你从“a”开始指向“abc”。

然后,您将“b”指向内存中的相同位置,即“a”指向。

然后,您决定“B”应该指向“XYZ”。

当然,“A”不变。

C ++:
STD.::str...ing * a = 新的STD.::str...ing("ABC");
STD.::COUT. << *a << std::终止;
STD.::str...ing *b = a;
B =新的STD.::str...ing("XYZ.");
STD.::COUT. << *a << std::终止;


这就是Java示例基本上正在做的事情,尽管它的语法是反映这种行为的糟糕工作。
WTD.




邮政发布: 2005年10月03日星期一12:34 PM  帖子主题:(没有主题)

Rizzix写道:
我告诉你Java引用不像C ++参考。他们指向对象但它们无法指向物理地址。


但他们确实指出了物理地址。你没有看到,因为Java不希望你看到它的褶边的下面,但这就是发生了什么。 微笑
Rizzix.




邮政发布: 2005年10月3日星期一:下午12:36  帖子主题:(没有主题)

*叹气*我宁愿称之为..

java.引用非常喜欢喜欢的Perl参考资料......它们是逻辑..他们无法真正指向任何物质..这一切都在VM中。

我不能在Java中真正这样做:
java.:
目的 a = 0x1F23FA;
或类似的东西...
Rizzix.




邮政发布: 2005年10月3日星期一12:41 PM  帖子主题:(没有主题)

WTD写道:
Rizzix写道:
代码:
字符串a ="abc";
system.out.println.(a);
字符串b = a;
B ="xyz";
system.out.println.(a);


注意只是因为我分配了b,a。并不意味着A已经改变为“XYZ”


是的,你有两个指针:“a”和“b”。你从“a”开始指向“abc”。

然后,您将“b”指向内存中的相同位置,即“a”指向。

然后,您决定“B”应该指向“XYZ”。

当然,“A”不变。



同样在您的示例中同样,参考s(参数)被分配给foo。 眨眼 现在,你看到为什么重新分配s的另一个对象...... s不是foo的别名!
从上一个显示帖子:   
   指数 -> java.
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

12  [ 23 Posts ]
转到页面 1, 2  下一页
跳到:   


Style:  
搜索: