string常量池是在方法区中吗 字符串常量池是在方法区中还是在独立的区域中?
字符串常量池是在方法区中还是在独立的区域中?
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对象,一个是string常量对象,它存储在字符串池中
如果您查看字符串源代码,您可以看到它是一个对象
!s=“123”
写这句话时,您将首先找出常量池中是否有字符串对象123。如果没有,他将开始提取,1,2,3
然后将其拼接成一个对象,即“123”
如果有另一个对象需要这个对象,例如S1=“123”
此时,在操作S1时,最好去常量池看看是否有这个对象。如果有,您可以直接获取地址,因为常量池数据是共享的
如果此时S1=“1234”则常量池不可用,您将再次提取1、2、3、4,然后将其重新组合为新对象并放入常量池中
!字符串源代码包含一个专用变量。字符类型数组用于提取这些单个字符,然后将它们拼接到字符串对象中
字符串常量池到底存放的是字符串引用还是字符串对象?
它可以理解为内存中字符串类型变量的一个特殊区域,例如字符串a=“ABC”当您定义这样一个变量时,Java将首先转到常量池以查找是否存在类似“ABC”的字符串。如果有,它会直接把内存地址给a,否则它会生成一个字符串“ABC”,下一个字符串B=当使用“ABC”时,发现常量池中已经有“ABC”。这时,JVM不会再生成“ABC”,而是直接把它交给“ABC”来引用B,这样您就会发现a==B
string常量池是在方法区中吗 字符串常量池在哪里 java字符串常量池
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。