java - 字符串不变性,小测验

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

最佳答案

连接发生在编译时,因此字符串会进入池,这就是为什么你得到true

关于最后一个,会创建一个新对象,因为您使用 new 关键字并通过 == 比较引用,因此您得到

这与不变性无关。

关于java - 字符串不变性,小测验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19679054/

相关文章:

c++ - 在 C++ 中从前缀到字符位置创建一个新字符串

python - 如何在单独的列表中拆分字符串中的每个单词

java - 用 jackson 反序列化 List<Interface>

java - 跳过@Before 进行测试 ||有没有办法在 TestRule 中执行 @Before 方法?

java - 用括号中的代码解释 Java Notation 'new'

c - 在 gcc 中编译 SHA1( ) 函数失败。 c语言

java - 运行.jar文件时出现NoClassDefFoundError

java - JUnitParamsRunner 与输入文件 - 字符串参数问题

java - 随机句子生成器返回数字而不是句子

python - 如何重新格式化字符串(对于新手)