Java在比较两个相等的字符串时返回false
当我执行:
String a = "hello";
String b = "hello";
System.out.println(a==b);
我得到的输出为“真”
但当我跑步时:
String a = new String("hello");
String b = "hello";
System.out.println(a==b);
我得到的输出为“false”
我知道,在第一种情况下,Java使“b”指向“a”指向的同一个对象,但为什么在第二种情况下它不能这样做呢
# 1 楼答案
Java中的字符串是不可变的。意思是:
a和b通常指向内存中的同一个对象
这里显式创建一个新对象
因此二者并不相等
==
比较内存地址。要检查Java中的一个对象是否等于另一个对象,应该使用所有对象上的equals
方法如果你把
System.out.println(a==b);
重写为System.out.println(a.equals(b));
,这两种情况都是如此