代码及
/**
* @author 江湖@小小白
* @create 2020/12/17 14:33
*/
public class Test {
public static void main(String[] args) {
//s1 存储的是指向堆区 “Programming” 的引用,存储位置在栈区
String s1 = "Programming";
//s2 创建新对象,产生新的引用地址
String s2 = new String("Programming");
//s3 存储的是指向堆区 “Program” 的引用,存储位置在栈区
String s3 = "Program";
//s4 存储的是指向堆区 “ming” 的引用,存储位置在栈区
String s4 = "ming";
//s5 存储的是指向堆区 “Programming” 的引用,存储位置在栈区,是一个新的引用
String s5 = "Program" + "ming";
//s6 存储的是指向堆区 “Programming” 的引用,存储位置在栈区,是一个新的引用
String s6 = s3 + s4;
System.out.println(s1 == s2);//比较的是引用地址,false
System.out.println(s1 == s5);//字符串拼接,然后找到一个匹配的位置s1,引用地址相同,true
System.out.println(s1 == s6);//s3 + s4 两个对象:开辟新的空间将引用地址赋值给 s6,s6 与 s1 比较,false
}
}