字符串不变性,流行测验

时间:2013-10-30 09:57:07

标签: java string

关于字符串不变性的问题有很多,但我还没有找到解决以下问题的答案:

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吗? 非常感谢!

1 个答案:

答案 0 :(得分:5)

串联发生在编译时,因此字符串进入池,这就是你得到true的原因。

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

这与不变性无关。