老师,关于String s =new String("ab")中“ab”

老师,关于String s =new String("ab")中“ab”

是不是“ab”这个对象在常量池,而它的引用在堆内存new String这个对象里面(或者说new String 这个对象里面放的是不是“ab”这个对象的引用而不是值?因为对象都是用引用来传递的,可以这么理解吗?那也就是说常量池中的每个字符串对象都有地址,只不过都是用引用的时候可以直接用本身来表示,譬如“ab”),请老师解答疑惑

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
univers_prodigal 2019-03-17 10:24:42

ab不在常量池中,String str ="ab",是在数据共享区有一个ab的字符串,在栈里面开辟了一个字符串变量str,str存的是数据共享区字符串ab里面的地址。
通过new关键字的是在堆中开辟一个空间,然后在开辟的空间里面存了一个字符串,看源码本质上是一个不可变数组。知识有限,不知道这样说合不合理。

  • 提问者 慕数据3488695 #1
    多谢解答!我刚刚在网上找到了希望对你也有所帮助: https://www.cnblogs.com/codingforum/p/6904551.html String a1 = new String("abc"); String a2 = new String("abc"); 在常量池没有"abc"对象的前提下,这两条语句产生了3个对象,两个处于堆中的string对象,一个处于字符串常量池string对象。
    2019-03-17 13:31:04
  • univers_prodigal 回复 提问者 慕数据3488695 #2
    感谢,有更理解了字符串。
    2019-03-17 18:15:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师