String 的intern()了解一下
看这篇文章总结一下:Java intern() 方法|菜鸟教程
public native String intern();
说明:intern() 方法返回字符串对象的规范化表示形式。
例子:
public static void main(String[] args) {
String s1 = "abc";
String intern = s1.intern();
System.out.println(intern);
}
返回值:
abc
intern()、“ == ”、equals()
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a" + "b" + "c";
String s3 = "ab" + "c";
String s4 = new String("abc");
//定义新变量 c
String c = "c";
String s5 = "ab" + c;
//用 “==” 判断
System.out.println(s1 == s2); //true
System.out.println(s1 == s3); //静态字符串相加,结果为 true
System.out.println(s1 == s4); //用new 创建新对象,结果为 false
System.out.println(s1 == s5); //用变量相加 结果为 false
System.out.println(s2 == s3); //静态字符串相加,结果为 true
System.out.println();
//用equals() 判断
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //静态字符串相加,结果为 true
System.out.println(s1.equals(s4)); //用new 创建新对象,结果为 true
System.out.println(s1.equals(s5)); 用变量相加 结果为 true
System.out.println(s2.equals(s3)); //静态字符串相加,结果为 true
System.out.println();
// //用 intern()判断
System.out.println(s1.intern() == s2); //true
System.out.println(s1.intern() == s3); //静态字符串相加,结果为 true
System.out.println(s1.intern() == s4); //用new 创建新对象,结果为 false
System.out.println(s1.intern() == s5); 用变量相加 结果为false
System.out.println(s2.intern() == s3); //静态字符串相加,结果为 true
// -----------------------------------------------
System.out.println(s1.intern() == s2.intern()); //true
System.out.println(s1.intern() == s3.intern()); //静态字符串相加,结果为 true
System.out.println(s1.intern() == s4.intern()); //用new 创建新对象,结果为 true
System.out.println(s1.intern() == s5.intern()); 用变量相加 结果为true
System.out.println(s2.intern() == s3.intern()); //静态字符串相加,结果为 true
}
总结
- 采用new 创建的字符串对象不进入字符串池。字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量则不会进入字符串池中。
- 在定义变量的时候赋值,如果赋值的是静态的字符串,就会执行进入字符串池的操作,如果池中含有该字符串,则返回引用。
- 两个字符串用intern() 判断相当于 用equals()判断。
- equals() 判断的是内容, " == " 判断的是地址。