使用 intern 方法时字符串常量池中没有对应对象的字符串返回堆中存在的同一对象的引用。不应该返回由 String 常量池中的 intern 方法新创建的完全不同对象的引用吗? 考虑给定的一段代码。
class Test{
public static void main(String[] args) {
String s1 = new String("durga");
String s2 = s1.concat("software");
String s3 = s2.intern();
System.out.println(s2 == s3);
String s4 = "durgasoftware";
System.out.println(s3 == s4);
}
}
输入: deep (master *) LanguagePackageInJava $ javac Lecture14.java
deep (master *) LanguagePackageInJava $ java 测试
输出: true
true
第一个打印语句的输出如何为真?据我说s2是堆区的对象,而s3应该是字符串常量池区的对象。它们怎么能指向同一个对象?