intern()方法可以把堆中的字符串对象放入串中,参考以下代码。
public class Demo1_23 { // String table["ab", "a", "b"] public static void main(String[] args) { String x = "ab"; String s = new String("a") + new String("b"); // 堆 new String("a") new String("b") new String("ab") String s2 = s.intern();//将这个字符串对象尝试放入串池,如果有则并不会放入,如果没有则放入串池,会把串池中的对象返回 System.out.println( s2 == x); //true,s2与x都是串池中的对象 System.out.println( s == x ); //true,s是堆中的对象,与串池中的对象是不同的对象 } }
不过jdk1.6中调用intern()方***将字符串尝试放入串池,如果有则不会放入,如果没有则会复制一份放入串池,因此,串池中的对象与堆中的对象并不是同一个对象。上面同样的代码再jdk1.6中s == x
返回false。
串池的特点总结如下。