4回复
2年前
用string.intern优化内存的问题【问题赏金:10元已结算】
大家帮忙看看关于这两行代码,我的分析是否正确:
str1 = “abc”;
str2 = new String(“abc”)
str1 = “abc”;
1.str1,首先是在字符串常量池中寻找"abc",找到则取其地址,找不到则创建并返回其地址
2.将该地址赋值给栈中的str1
str2 = new String(“abc”)
1.在堆中创建String对象,我查阅了String构造方法源码,实际值取的是"abc"的(此时"abc"已经存在字符串常量池中)引用,也就是说,str2还是指向常量池,并没有创建新的"abc"。
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
2.堆中创建完String对象,将该对象的地址赋值给栈变量str2
疑问:
既然不管是以上哪种方式,最终实际引用的还是常量池中的"abc",str2 = new String(“abc”)只是增加了一个堆中String的“空壳”对象而已(因为实际上char[]指向的还是常量池中的"abc"),这个空壳对象并不会占用过多内存。而.intern的实质只是减少了这个中间的String空壳对象,那何来通过.intern减少大量内存?
问答赏金领取规则和入口
922 阅读