-4

谁能解释一下?

String a=new String("srihari");
String b=new String("srihari");

boolean res1=(a==b); // reference check
System.out.println(r); // true

boolean res2=a==b;   // object check (diff object)
System.out.println(res);  // false

为什么这个 diff b/wres1res2,

res2=a==b如何在这里两个对象以及res1=(a==b)为什么在这里引用

4

3 回答 3

4

您没有使用正确的变量:

String a=new String("srihari");
String b=new String("srihari");

boolean res1=(a==b);
System.out.println(res1); // false

boolean res2=a==b;
System.out.println(res2);  // false

至于解释,你做一个参考检查时间,它false。评估是在做作之前完成的,因此您的两个测试实际上是相同的。

他们反过来没有意义,您不能将 a 分配String给 aboolean然后检查结果是否具有与 another 相同的引用String

于 2013-06-06T08:47:08.930 回答
0

我假设提供的代码示例不是导致 OP 出现问题的原始代码示例(由于其他人指出的可变问题),但确实有可能==String引用之间返回true(这可能是 OP 所经历的) .

public class Main
{
     public static void main(String... args)
     {
         String s1 = "srihari";
         String s2 = "srihari";
         System.out.println(s1 == s2); //true
     }
}

这样做的原因是 Java"srihari"两次看到字符串文字并将两者分配给相同的内部字符串实例作为优化。

当然,我在猜测 OP 最初的意图。我可能跑题了

于 2013-06-06T11:19:21.187 回答
0

两者都println打印false因为a不等于b参考平均值。

于 2013-06-06T08:47:06.787 回答