- String str1 = "a";
- String str2 = str1 + "bc";
- System.out.println(str2 == "abc"); //这里是false
复制代码
栈中开辟一块空间存放引用str1;
1) 堆中开辟一块空间存放一个新建的String对象"a";
2) 引用str2指向堆中的新建的String对象"bc";
3) str2所指代的对象地址为堆中地址,而常量"abc"地址在池中,输出为false;
- final String str3 = "a";
- String str4 = str3 + "bc";
- System.out.println(str4 == "abc"); //被final修饰过之后就是true了 为什么?
复制代码栈中开辟一块空间存放引用str3;
1) 根据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"a";
2) 引用str4指向池中常量"bc";
3) str4所指即池中常量"abc",输出为true;
|