Java String.intern()方法学习


1. Demo代码  


StringTest.java:


/**
* Java String.intern()学习
*/
public class StringTest {

public static void main(String[] args) {
String s0 = "asdf"; //字符串"asdf"被放到运行时常量池当中
String s1 = new String("asdf"); //new String("asdf") 是一个String类的对象,被放到Java堆中。s1是它的引用,被放到虚拟机栈中
String s2 = new String("asdf"); //new String("asdf") 是一个String类的对象,被放到Java堆中。s2是它的引用,被放到虚拟机栈中


System.out.println(s0 == s1); //false
System.out.println(s1 == s2); //false

// String的intern()方法可以扩充运行常量池
// 当一个String实例str调用intern()方法时,Java查找常量池是否有相同的字符串常量
// 如果有该字符串常量,则返回该字符串的引用;如果没有,则在常量池中增加一个str字符串并返回它的引用

// s1.intern()的执行顺序如下:
// 首先到常量池中查找是否有"asdf"字符串常量
// 发现存在该字符串常量,则直接返回"asdf"常量的引用s0,并赋值给s1
s1 = s1.intern(); // s1.intern()返回的是常量池中"asdf"的引用
System.out.println(s0 == s1); //true
System.out.println(s1 == s2); //false
}
}





2. 结果截图:




Java String.intern()方法学习_常量池