栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)中没有对应的字符串常量对象就创建之后再返回。

欢迎指正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号