布尔值res = a == b和布尔值res =(a == b)之间的差异

时间:2013-06-06 08:44:38

标签: java

可以解释一下吗?

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

为什么这个差异b / w res1res2

res2=a==b这里有两个对象和res1=(a==b)为什么在这里引用

3 个答案:

答案 0 :(得分: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。评估在做作之前完成,因此两个测试实际上都是相同的。

他们反过来没有意义,你不能将String分配给boolean,然后检查结果是否与另一个String具有相同的引用。

答案 1 :(得分:0)

两个println都打印false,因为a在参考均值中不等于b

答案 2 :(得分: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最初的意图。我可能会偏离正轨