我运行了以下程序,
String firstString = "String";
String secondString = "String";
String thirdString = new String("String");
System.out.println(firstString == secondString);
System.out.println(firstString == thirdString);
System.out.println(firstString.intern() == thirdString);
System.out.println(firstString.intern() == thirdString.intern());
System.out.println(firstString.intern().equals(thirdString.intern()));
System.out.println(firstString == thirdString);
我的输出是
true
false
false
true
true
false
我了解到,jvm池中包含与相同字符串相同内容的字符串。是对的吗?如果那是真的,那为什么不让firstString == thirdString返回false? jvm是否仅合并仅使用:“”而不使用new运算符初始化的字符串?
最佳答案
池仅与字符串文字有关-因此firstString
和secondString
实际上是同一对象-与thirdString
中一样,您明确要求在堆上创建一个新对象。
我建议阅读有关string literals in the spec的部分。
它提供了有关如何以及何时合并字符串的更多信息。
另外,请注意本节末尾的这些项目符号:
关于java - Java字符串问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12339230/