JVM有关常量池问题

J2EE 码拜 8年前 (2016-03-18) 696次浏览
     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出来的地址,原来的值会一直存在常量池中。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JVM有关常量池问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)