当我们这样做时:
String a = new String("abc");
String b = new String ("abc");
并执行a == b
它会返回 false ,因为它们是2个不同的对象。
但是,当我们有这个:
String c = "abc";
String d = "abc";
我们执行c == d
它会返回 true 。这是为什么?它还应该返回假吗?为什么==运算符在这种情况下表现为.equals()方法?
答案 0 :(得分:1)
这是因为Java使用所谓的Stringpool并尝试重用旧的String-Literals来节省一些内存。但是如果你说“new String”,你总是根据Literal创建一个新的Object。请参阅:here我建议您始终使用Objects.equals(a,b),如果您想确保对象相等(或者如果您确定它不为null则在Object上调用相等)