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);
}
}
网友评论