永发信息网

字符串常量池到底存放的是字符串引用还是字符串对象

答案:3  悬赏:60  手机版
解决时间 2021-03-20 08:13
字符串常量池到底存放的是字符串引用还是字符串对象
最佳答案
你看看String源码就明白了,是对象!

s="123";
写这句话的时候,会在常量池先找有没有123这个字符串对象如果没有,他就开始抽取,1,2,3
然后拼接成一个对象即:"123";
假如后面又来一个也需要这个对象,比如说s1="123";
这个时候在操作s1的时候还是先去常量池找有没有这个对象,如果有,直接把地址拿过来,因为常量池数据为共享的,
假如这个时候s1="1234";那么常量池是没有的,就会重新抽取,1,2,3,4,然后重新拼接成一个新的对象放在常量池!
String源码里面有一个私有变量一个字符类型的数组,他就是用来抽取这些单个字符,然后拼接成
一个字符串对象!
全部回答
众所周知,JDK1.8版本中,String常量池已经从方法区中的运行时常量池分离到堆中了,那么在堆中的String常量池里存的是String对象还是引用呢?我在网上查了一晚上,各有各的说法,最后索性直接查看API(果然API才是最强大的!!!),废话少说,直接上图:
(此图为JavaAPI中的阐述,我是用手机在网页打开的百度,不能复制图片,想看的原图可以去下面的原文链接里面看一下)

翻译一下,String类的intern()方法:一个初始为空的字符串池,它由类String独自维护。当调用 intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(oject)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。 对于任意两个字符串s和t,当且仅当s.equals(t)为true时,s.intern() == t.intern()才为true。所有字面值字符串和字符串赋值常量表达式都使用 intern方法进行操作。
所以答案显而易见,官方都给了明确说明,还有什么好争论的呢?

转载自CSDN博主(木舟遥)————https://blog.csdn.net/weixin_39460458/article/details/79982765
引用,相同内容的字符串,会返回同一个引用
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
优福记法式脆皮蛋糕河口NO.1地址在哪,我要去
懒人听书开通免流量显示error是怎么回事?
为什么京东的手机比淘宝的贵
新君威1.5万公里保养 要做哪些保
第的常见组词有哪些?
游坝村在哪里啊,我有事要去这个地方
怎样巧记英语单词啊?要巧记的哦!求解
书包两肩上可以调整长度的东西叫什么
孕囊约2.3x1.0cm,胎芽0.3cm是男孩女孩
河北三河市房产中介怎么给客户做网签
紧密相关什么意思
您好,我的信用卡是因为逾期不还款,被冻结了
爱喜薄荷和520香烟一般都烟草店有卖么,多钱
817除以43乘37等于多少 加 减 乘 除
鸿浩酒吧KTV地址有知道的么?有点事想过去
推荐资讯
上海交警最少的地方
请问《Who you》这首歌的中文歌词
螺丝怎么样清洗才干净
roll up someones sleeve是什么意思
明天去西宁出差,有什么玩的地方推荐么
魅蓝5用的是大卡还是小卡
每个皈依上师的弟子为什么有法名
windows7如何修改文件夹权限777?
志公教育的南宁旗舰学习中心在哪里?
在ps4上玩星际战甲,过完一关界面就控制不了
燃气热水器安全限压阀是什么?
请问从镇海到宁波市第六医院乘371公交车可以
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?