String的intern()方法

public class Test {
    public static void main(String[] args) {
        //此时s3的值是11,常量池中的值是1,
        String s3 = new String("1")+new String("1");
        //此时s3的值是11,s3.intern()在常量池中寻找,没有就创建,常量池中的StringTable默认大小1009,所以现在常量池中的值是11,
        s3.intern();
        //b想在常量池中创建11,发现s3已创建,所以直接引用a的地址。
        String s4 = "11";
        //所以s3==s4是true,JDK7之后常量池的内存是放在堆中。
        System.out.println(s3 == s4);

    }
}
public class Test {
    public static void main(String[] args) {
        //此时生成两个对象,常量池中的1和堆中的string对象
        String s = new String("1");
        //s 对象去常量池中寻找后发现1已经在常量池里了。
        s.intern();
        //生成一个引用b指向常量池中的1
        String s2 = "1";
        //两个引用不一样,所以是false
        System.out.println(s==s2);
    }
}
String的intern()方法_第1张图片

你可能感兴趣的:(String的intern()方法)