package Test;
/*
* zt
* 2020/7/30
* 9:37
* 面试题 false true
*/
public class Demo1 {
public static void main(String[] args) {
//常量池
String s1 = "abc";
//常量池
String s2 = "xyz";
//程序运行,不会放到常量池,放入堆
String s3 = s1+s2;
//常量池
String s4 = "abc" + "xyz";
//常量池
String s5 = "abcxyz";
System.out.println(s3==s4);
System.out.println(s4==s5);
}
}
false
true
package Test;
/*
* zt
* 2020/7/30
* 9:37
* 面试题 false true
*/
public class Demo1 {
public static void main(String[] args) {
//常量池
String s1 = "abc";
//常量池
String s2 = "xyz";
//程序运行,不会放到常量池,放入堆
String s3 = s1+s2;
//常量池
// String s4 = "abc" + "xyz";
// intern();重用,如果常量池没有将对象复制一份(或者引用)
// 如果常量池存在,直接返回
// JDK1.7之前是复制一份放入常量池,之后(包括JDK1.7)把对象引用赋值到常量池
String s4 = s3.intern();
//常量池
String s5 = "abcxyz";
System.out.println(s3==s4);
System.out.println(s4==s5);
}
}
true
true
java 还有一些…在常量池本来就有,所以不需要intern()再复制地址过来。
所以运行结果: false