62,614
社区成员
发帖
与我相关
我的任务
分享
public class Test {
public static void main(String[] args) {
t1();
t2();
}
public static void t1() {
String s1 = "a";//因为 "a"为常量所以编译的时候 "a"就被放入字符串常量池中
String s2 = s1 + "b";//因为s2=s1+b,"b"为常量被放入长字符串常量池中,但是s1为变量所以s2整体不能被放入 常量池中
s2.intern();//上句执行后,s2="ab",调用intern()方法后,发现字符串常量池中 没有"ab",所以在常量池中加入常量"ab"并把s2的引用放入池中。
String s3 = "ab";//s3执行的时候,系统发现字符串常量池中有"ab"所以把地址给s3,这里的地址就是s2的地址。
System.out.println(s2 == s3);//两个地址相同所以输出true。
}
public static void t2() {
String s1 = "a";//因为 "a"为常量所以编译的时候 "a"就被放入字符串常量池中
String s3 = "ab";//因为"ab"是常量,所以在于编译的将"ab"放入字符串常量池中,地址为s3的。
String s2 = s1 + "b";//s2中因为有变量s1所以不能确认地址。
s2.intern();//这句执发现常量池中有"ab"但是返回引用S2没有接收所以还是以前地址。
System.out.println(s3 == s2);//这里所以是false.
}
}