根据 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
将不会打印。但结果是:两行都被打印出来了。所以这意味着,默认情况下,字符串常量是 intern 的。但如果是这样,那我们为什么需要 intern
方法呢?换句话说,我们什么时候应该使用这个方法?
原文由 Rakesh Juyal 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 自动实习字符串文字。这意味着在许多情况下,== 运算符对字符串的处理方式与对整数或其他原始值的处理方式相同。
由于字符串文字的实习是自动的,
intern()
方法将用于构造的字符串new String()
使用你的例子:
将返回:
在除
s4
变量之外的所有情况下,其值是使用new
运算符显式创建的,其中intern
未使用其结果的方法返回 JVM 的字符串常量池 的单个不可变实例。有关详细信息,请参阅 Java 技术“字符串相等性和实习” 。