java字符串常量池 与 堆内存 混淆

图片说明输出语句中的"abc"和输入的str 都存在什么位置?

2个回答

"abc"存在于字符串常量池,str存在于堆内存
当你用input.next()输入一个字符串时,JVM会先看看字符串常量池中,有没有"abc",
1.没有,会将"abc"放入字符串常量池中,然后把"abc"的引用地址赋值给str
2.有,则直接将"abc"的引用地址赋值给str
而str是String类型,String是一个对象,对象需要在堆内存中开辟空间

希望对你有所帮助

VirtualKing
Deters 回复xiao_kun_: "abc" = new String("abc") 这是java的语法糖,把实例化封装了,你看不见而已
大约一个月之前 回复
VirtualKing
Deters 回复xiao_kun_: 你可以这样做: System.out.println(str) 输出的是一串地址,比如 0x123456,这个地址就是你用Scanner输入的放入字符串常量池的"abc"的引用地址
大约一个月之前 回复
xiao_kun_
xiao_kun_ String str = "abc" ; 就跟“abc”相等 为啥输入的就一样呢
大约一个月之前 回复
xiao_kun_
xiao_kun_ 还是不懂 str不是实例化的啊 引用池中 的“abc”的地址啊
大约一个月之前 回复
xiao_kun_
xiao_kun_ 谢谢
大约一个月之前 回复
xiao_kun_
xiao_kun_ 谢谢
大约一个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!