java字符串==运算符是否比较引用?
public class Test
{
public static void main(String args[])
{
String a="meow";
String b=a+"deal";
String c="meowdeal";
System.out.println(b==c);
}
}
根据我的说法==运算符比较引用。所以b==c应该打印“true” 但它打印的是“假”。我通过打印“b”和“c”的哈希代码进行检查
两者的哈希代码相同
# 1 楼答案
没错。如果两个操作数都是引用类型,
==
运算符比较引用。(如果任何一个操作数都是基元类型,这是不正确的……但这是另一个主题。)你的推理是错误的
事实上,当代码完成时,
b
和c
引用具有相同值的不同字符串对象。实际上,JLS声明+
操作符创建了一个新的字符串objext<除非表达式是常数表达式。(在本例中,它不符合常量表达式的条件,因为a
是一个变量。)所以
b == c
是false
。。。因为==
正在比较引用,而引用是不同的# 2 楼答案
==
比较引用,但是对b
和c
的引用是不同的——它们是两个不同的String
实例,尽管它们包含相同的内容如果要比较两个字符串的内容,请使用
equals()
# 3 楼答案
对象应该使用
b.equals(c)
,基元类型应该使用==