关注
没有亲身读过JVM源码,不过看过一些关于JVM的书,谈谈理解吧。从两个过程来看吧,编译和JVM运行时加载编译的时候,如果字符串就是常量,比如s1的时候就直接在字符串常量池放ABC,并让s1指向它,编译s2那行,发现它也是常量,就去池里找,发现没有DEF,就同样建立起来,s3也同理。到了s4,编译器发现是可以被优化的,因为没有其它对象的引用,即两个常量相加成了ABCDEF,这个串常量池里有了,所以就直接让s4也指向这个常量。到了s5.s6.s7,虽然在我们看来还是常量相加,但是编译器看来,这里涉及到的是对象引用,所以它会替换成引用符号,不做字符串常量池的查询和建立操作。JVM运行时加载的时候,常量池是最先分配完成的,也就是这时候s1.s2.s3.s4都有具体的常量池地址指向了,但是s5.s6.s7还需要解析里面的引用,这个过程中会分配新的内存地址让s5他们去指向,所以他们是完全不同的对象了。注: ==比较的应该不是引用所在的地址,而是引用的对象所在的地址,s3和s4是两个不同引用,但是都指向了同一个字符串常量池里的值。当然这里还有一个点,就是new String("ABCDEF"),你会发现还是跟s3相等,因为本质都是他们在编译器看来,没有涉及到任何引用,都是常量!都可以直接放在字符串常量池里!
查看原帖
点赞 6
相关推荐
10-30 19:20
重庆邮电大学 测试开发 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你小心翼翼的闯过多大的祸? #
1890次浏览 45人参与
# 找不到实习会影响秋招吗 #
1398961次浏览 13627人参与
# 实习没事做是福还是祸? #
2208次浏览 41人参与
# 考研人,我有话说 #
156405次浏览 1211人参与
# 2025年终总结 #
129840次浏览 2188人参与
# 实习简历求拷打 #
21610次浏览 232人参与
# 哪些公司笔/面试难度大? #
6980次浏览 32人参与
# 携程工作体验 #
18798次浏览 66人参与
# 那些我实习了才知道的事 #
252848次浏览 1784人参与
# 你觉得现在还能进互联网吗? #
29854次浏览 200人参与
# 第一份工作能做外包吗? #
93871次浏览 599人参与
# 投格力的你,拿到offer了吗? #
154430次浏览 829人参与
# 秋招遇到的奇葩面试题 #
101186次浏览 416人参与
# 作业帮求职进展汇总 #
85016次浏览 559人参与
# 简历当中有水分算不算造假? #
154211次浏览 2250人参与
# 秋招被挂春招仍然能投的公司 #
8782次浏览 110人参与
# 扒一扒那些奇葩实习经历 #
140016次浏览 1148人参与
# 正在实习的你,有转正机会吗? #
465652次浏览 3062人参与
# 信也科技工作体验 #
13494次浏览 39人参与
# mt对你说过最有启发的一句话 #
41564次浏览 468人参与
