关于字符串不变性有很多问题,但我还没有找到为什么会发生以下情况的答案:
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 吗? 非常感谢!
最佳答案
连接发生在编译时,因此字符串会进入池,这就是为什么你得到true
。
关于最后一个,会创建一个新对象,因为您使用 new
关键字并通过 ==
比较引用,因此您得到 假
。
这与不变性无关。
关于java - 字符串不变性,小测验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19679054/