为什么`==`有时适用于字符串?

时间:2014-10-05 04:21:56

标签: java object reference equality

考虑这段代码:

String baz = "Hello";
String foo = "Hello";
return foo.equals(baz); // Returns true as expected
return(baz == foo); // Also returns true!

为什么==运算符在这种情况下也会返回true?它应该是比较对象本身的位置,而不是它们的值。

我假设Java执行某种内部工作并确定这两种类型String(或Integer等),因此它隐式调用.equals()方法。

我很想知道 这是怎么做的(即后台发生的事情), 为什么 这样做了,如果我真的想在内存中测试它们的位置怎么办?

1 个答案:

答案 0 :(得分:5)

return(baz == foo)也返回true,因为所有文字字符串都是用Java实现的。当调用intern方法时,如果池已经包含一个等于此String对象的字符串由equals(Object)方法确定,然后返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。

因此,由于您的案例return(baz == foo)使用字符串实习池,行为与return(baz.equals(foo))的行为相同

Read more about String literals in Java Specs