【发布时间】:2014-10-05 04:21:55
【问题描述】:
考虑这段代码:
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() 方法。
我很想知道具体如何这是完成的(即后台发生了什么),以及为什么 这样就完成了,如果我真的想测试它们在内存中的位置呢?
【问题讨论】:
-
这与在这里找到的一个非常流行的线程非常相似:stackoverflow.com/questions/513832/…
-
@MattJones:同一枚硬币,但反面。
-
@MattJones 谢谢。我没有看到那个线程。虽然它包含我的答案,但我认为不应将其标记为重复,因为寻找相同答案的人可能不会在该线程中查看,因为问题本质上是不同的
-
@Tiberiu:是的,确实那个标记的问题与你的问题并不完全相同,这就是我重新打开你的问题的原因。
-
我认为它应该被标记为重复。即使它被标记为重复,这个问题仍然存在,人们仍然可以找到他们的方式过去(和回来)。此处留下的任何答案以及以某种方式实习的重复封面字符串中的高票答案绝对没有添加任何新内容。
标签: java object reference equality