0

有很多关于字符串不变性的问题,但我还没有找到为什么会发生以下情况的答案:

1) "TEST".equals("TEST")            // TRUE obviously
2) "TEST" == "TEST"                 // Also TRUE since String's are immutable
3) "TEST" == "T" + "E" + "S" + "T"  // TRUE, but why? Due to compiler optimalization?
4) "TEST" == new String("TEST");    // FALSE, because you explicitly request a new String?

如有必要,谁能纠正我并进一步详细解释 3 和 4?非常感谢!

4

1 回答 1

5

连接发生在编译时,所以字符串进入池,这就是你得到true.

关于最后一个,创建了一个新对象,因为您使用new关键字并比较引用==,所以您得到false.

这与不变性无关。

于 2013-10-30T09:59:14.457 回答