public static void main(String[] args) { String str1="abc012"; String str4="abc"; for(int i=0;i<3;i++){ str4 +=i; System.out.println(str4==str1); } }
程序执行结果:
false
false
false
问题:
首先,依据本人所知道的来说,Java在编译期会将字符串常量加载在常量池中,并且Java存在共享机制,,就是说同一个常量不会被创建两次,那么问题就来了,
本渣渣的程序对str4进行修改,在第三次循环创建abc012变量的时候,为什么没有将常量池abc012的引用赋给str4?(求赐教,还有本人怎么觉得CSDN的帖子不能单个回复呢?)
解决方案
20
看代码或单步调试,原因是你是重新创建了啊,2个String地址不一样啊。不信你单步调试进入String方法里面看看就知道了。
20
使用String 每次值改变时,都是在常量池去调用该值,假如有该值,则直接引用该值的地址,假如没有,则new 一个出来,并调用新new出来的地址,原来的值会一直存在常量池中。