2016 - 2024

感恩一路有你

字符串常量池在堆中还是方法区 字符串常量池到底存放的是字符串引用还是字符串对象?

浏览量:1804 时间:2021-03-14 08:37:59 作者:admin

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

如果你看字符串的源代码,你会发现它是一个对象

!s=“123”

写这句话时,您将首先找出常量池中是否有字符串对象123。如果没有字符串对象123,他将开始提取,1,2,3

然后将其拼接成一个对象,即“123”

如果还有另一个对象也需要这个对象,例如S1=“123”

此时,操作S1时应先到常量池中查找是否有这个对象,如果有,取直接寻址,因为常量池数据是共享的,

如果此时S1=“1234”则常量池不存在,它将被再次提取,1、2、3、4,然后重新组装成常量池中的新对象

字符串常量池是在方法区中还是在独立的区域中?

string STR=“nihao”当程序开始执行此代码时,它必须创建一个对象,但在创建对象之后,它是一个不能更改的常量,并且对象被放入字符串池,即,你说的常量池

如果我以后再写代码:String Other=“nihao”

STR和Other的地址是一样的,因为STR和Other的声明方式是一样的。创建STR对象时,如果字符串池中没有“nihao”常量,请创建一个。创建其他对象时,发现字符串池中有一个“nihao”常量,直接使用即可

string B1=New string(“nihao”)

但如果用上述方法直接New string(),则A1和B1引用的对象不在字符串池中,而是在堆中。但是,new string()的参数“nihao”也是一个字符串。这根绳子是从哪里来的?如果我们拆分代码,我们会理解它:

string A1=new string(para)

会发现代码字符串A1=new string(“nihao”)实际上创建了两个对象,一个是string object,存储在堆中,另一个是string constant object,存储在字符串池中

字符串常量池在堆中还是方法区 java字符串常量池 字符串常量池和运行时常量池的联系

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。