| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Java Sting类 new String(“字面量”) 和 s = “字面量”的细节 -> 正文阅读 |
|
[数据结构与算法]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)中没有对应的字符串常量对象就创建之后再返回。 欢迎指正! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:33:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |