Java intern()用法
2019-12-17 本文已影响0人
小胖学编程
转自: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()方法就是返回调用者常量池中的引用。