字符串intern()方法

时间:2019-01-10 08:01:33

标签: java string

据我所知,String s1 = new String(“ abc”)创建两个对象-

  1. 堆中一个
  2. 字符串常量池(SCP)中的另一个。

因此,每当我们使用“ new”关键字创建String对象时,它将在SCP中创建一个对象。

是否可能在堆中有一个String对象,但在SCP中没有?

  1. 如果否,那么添加字符串对象的intern()方法有什么用? 如果它不在SCP中。
  2. 如果是,请举个例子。

1 个答案:

答案 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));
}

}