可以解释一下吗?
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 res1
和res2
,
res2=a==b
这里有两个对象和res1=(a==b)
为什么在这里引用
答案 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最初的意图。我可能会偏离正轨