关于字符串不变性的问题有很多,但我还没有找到解决以下问题的答案:
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吗? 非常感谢!
答案 0 :(得分:5)
串联发生在编译时,因此字符串进入池,这就是你得到true
的原因。
关于最后一个,创建了一个新对象,因为您使用new
关键字并按==
比较引用,因此您获得了false
。
这与不变性无关。