StringTable中的intern方法,主动将串池中还没有的字符串对象放入串池。
- jdk 1.8中是将这个字符串对象尝试放入串池,如果串池中有该对象则不会放入,如果没有则将这个字符串对象放入串池。方法并将串池中的字符串返回。
- jdk 1.6将这个字符串对象尝试放入串池,如果串池中有该对象则不会放入,如果没有将会把此对象复制一份,并将复制后的对象放入串池中。会把串池中的对象返回。
案例分析
//jdk 1.8
public static void main(String[] args){
int x = "ab";
String s = new String("a") + new String("b");
String s2 = s.intern;
System.out.println(s2 == x);//true
System.out.println(s == x);//true
}
int x = "ab"中,我们将“ab”字符串放入到字符串常量池中,s是我们new的对象“ab”,此时我们调用方法s.intern将s中的“ab”放入字符串常量池时,发现常量池中已经存在“ab”,则不会放入,返回常量池中的对象“ab”赋给s2,也就是说此时的s2的“ab”,是原先放入的池中的s的“ab”,因此:
System.out.println(s2 == x);//true
System.out.println(s == x);//true



