Tib*_*riu 3 java equality reference object
考虑一下这段代码:
String baz = "Hello";
String foo = "Hello";
return foo.equals(baz); // Returns true as expected
return(baz == foo); // Also returns true!
Run Code Online (Sandbox Code Playgroud)
为什么==
运算符在这种情况下也会返回true?应该比较对象本身的位置,而不是它们的值.
我假设Java做了某种内部工作,并确定这两个是类型String
(或Integer
等),所以它隐式调用该.equals()
方法.
我很想知道这是如何完成的(即背景中发生了什么),以及为什么要这样做,如果我真的想在内存中测试它们的位置怎么办?
return(baz == foo)
也返回true,因为所有文字字符串都是用Java实现的.调用实习方法时,如果池已经包含等于此字符串对象的字符串(由equals(Object)方法确定),则返回池中的字符串.否则,将此String对象添加到池中,并返回对此String对象的引用.
因此,简而言之,由于使用String intern pool为您的情况return(baz == foo)
表现相同return(baz.equals(foo))