转自:Java intern() 方法
尽管在输出中调用intern方法并没有什么效果,但是实际上后台这个方法会做一系列的动作和操作。在调用"ab".intern()
方法时会返回"ab"
,但是这个方法会首先检查字符串池中是否有"ab"
这个字符串,如果存在则返回该字符串的引用,否则就将这个字符串添加到字符串池中,然后返回这个字符串的引用。
public class TestStr {
public static void main(String[] args) {
String str1 = "a";
String str2 = "b";
String str3 = "ab";
String str4 = str1 + str2;
String str5 = new String("ab");
String str6 = "a" + "b";
System.out.println(str3 == str6); //true 静态字符串相加的结果会加入到字符串常量池中。
System.out.println(str3 == str4); //false 字符串相加,且含有变量,不会加入到常量池中。
System.out.println(str5.equals(str3)); //true
System.out.println(str5 == str3); //false
System.out.println(str5.intern() == str3); //true
System.out.println(str5.intern() == str4); //false
}
}
- 采用
new
创建出来的字符串不会进入字符串常量池
; - 字符串相加时,都是静态字符串的结果会添加到字符串池,如果其中含有变量则不会加入到字符串池中。
- 当
str5
调用intern
的时候,会检查字符串常量池中是否含有该字段,由于之前定义的str3
已经进入到该常量池汇总,所以str5
和str3
会得到相同的引用。
总结:intern()方法就是返回调用者常量池中的引用。
网友评论