考虑这段代码:
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()
方法。
我很想知道 这是怎么做的(即后台发生的事情), 为什么 这样做了,如果我真的想在内存中测试它们的位置怎么办?
答案 0 :(得分:5)
return(baz == foo)
也返回true,因为所有文字字符串都是用Java实现的。当调用intern方法时,如果池已经包含一个等于此String对象的字符串由equals(Object)方法确定,然后返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。
因此,由于您的案例return(baz == foo)
使用字符串实习池,行为与return(baz.equals(foo))
的行为相同