Java Sting类 new String(“字面量”) 和 s = “字面量”的细节

记录分享一下学习它们的区别

 

debug下面的测试代码

 可以看到s1和s2的 value指向同一个内存地址

我们接着往下走,发现当s3执行hashCode方法时,s3和s2对象的 hash值都改变了

 证明他们是同一个对象(废话),所以我自己觉得它们在内存中应该是这样的(如果不对求大佬指正!):

 s2和s3都指向一个存放在堆中字符串常量池的String对象,而这个对象的final char[] value指向的是由执行s1 = new String("shboui")时在字符串常量池创建的字符数组value。也就是说,s1 = new String("shboui")时会在字符串常量池中创建一个值为"shboui"的字符串数组value。

但是不知道是执行s1 = new String("shboui")创建字符串数组value之后立刻在stringtable中创建一个字符串常量对象,还是等到执行String s2 = "shboui" 时再在其中创建字符串常量对象.....

我认为应该是创建value数组之后并未创建对应的字符串常量对象,为什么呢?我们知道String提供了一个intern()方法,调用该方法会返回对应的字符串常量对象,如果stringtable(底层貌似是hashtable)中没有对应的字符串常量对象就创建之后再返回。

欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值