一尘不染

Java 什么时候应该在String文字上使用String的内部方法

java

根据String#intern()intern如果在字符串池中找到字符串,则该方法应从字符串池返回字符串,否则,将在字符串池中添加新的字符串对象,并返回此字符串的引用。

所以我尝试了这个:

String s1 = "Rakesh";
String s2 = "Rakesh";
String s3 = "Rakesh".intern();

if ( s1 == s2 ){
    System.out.println("s1 and s2 are same");  // 1.
}

if ( s1 == s3 ){
    System.out.println("s1 and s3 are same" );  // 2.
}

我期望s1 and s3 are same在s3被实习生时将被打印,并且s1 and s2 are same不会被打印。但是结果是:两行都被打印了。因此,这意味着默认情况下会保留String常量。但是如果是这样,那为什么我们需要这种intern方法呢?换句话说,什么时候应该使用这种方法?


阅读 413

收藏
2020-03-01

共1个答案

一尘不染

Java自动实习字符串文字。这意味着在许多情况下,==运算符似乎适用于Strings,其处理方式与ints或其他原始值的用法相同。

由于Interning对于String文字是自动的,因此该intern()方法将用于使用new String()

使用你的示例:

String s1 = "Rakesh";
String s2 = "Rakesh";
String s3 = "Rakesh".intern();
String s4 = new String("Rakesh");
String s5 = new String("Rakesh").intern();

if ( s1 == s2 ){
    System.out.println("s1 and s2 are same");  // 1.
}

if ( s1 == s3 ){
    System.out.println("s1 and s3 are same" );  // 2.
}

if ( s1 == s4 ){
    System.out.println("s1 and s4 are same" );  // 3.
}

if ( s1 == s5 ){
    System.out.println("s1 and s5 are same" );  // 4.
}

将返回:

s1 and s2 are same
s1 and s3 are same
s1 and s5 are same
2020-03-01