据我所知,String s1 = new String(“ abc”)创建两个对象-
因此,每当我们使用“ new”关键字创建String对象时,它将在SCP中创建一个对象。
是否可能在堆中有一个String对象,但在SCP中没有?
答案 0 :(得分:-2)
intern()方法通过查看预先存在的字符串文字池,有助于使用==运算符比较两个String对象,它比equals()方法更快。
尽管Java默认情况下会自动对所有String进行实习,但是请记住,我们只需要在非常量字符串时对其进行实习,并且我们希望能够将它们与其他实习字符串进行快速比较。应该对用新String()构造的字符串使用intern()方法,以便通过==运算符对其进行比较。
包装测试;
公共类TestString {
public static void main(String[] args) {
String s1 = "Test";
String s2 = "Test";
String s3 = new String("Test");
final String s4 = s3.intern();
System.out.println(s1 == s2);
System.out.println(s2 == s3);
System.out.println(s3 == s4);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s3.equals(s4));
System.out.println(s1.equals(s4));
System.out.println(s1.equals(s3));
}
}