我在测试中遇到过这个问题:
class Hello {
public static void main(String[] args){
String hello = "Hello", lo = "lo";
System.out.println(hello == ("Hel" + "lo"));
System.out.println(hello == ("Hel" + lo));
System.out.println(hello == ("Hel" + lo).intern());
}
}
输出结果为:
true
false
true
为什么第二个输出false
?
答案 0 :(得分:5)
它打印'false',因为String常量“Hel”和String对象'lo'的串联导致一个seaparate,匿名字符串对象,具有自己唯一的对象引用。因此,“hello”String对象和连接字符串是基于对象引用的不同对象(==运算符,而不是String.equals()的String值。)
答案 1 :(得分:2)
==
比较双方的参考文献。
这里,对于hello == ("Hel"+lo)
,双方的引用并不相同。因此,它返回false
。
要比较值,请使用equals()
方法。
答案 2 :(得分:1)
我认为这是因为在第二个输出中(" Hel" + lo)在字符串中不再存在。平等" =="运算符比较对象的内存位置而不是String的字符。默认Java将所有字符串文字放入字符串池,但你也可以通过调用java.lang.String类的intern()方法将任何字符串放入池中,就像使用new创建的字符串一样()运算符。
答案 3 :(得分:1)
我认为这是比较文字问题。
有效。
System.out.print((hello.equals("Hel"+lo)) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");