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

字符串常量池是在方法区中还是在独立的区域中?String STR=“nihao”当程序开始执行此代码时,它必须创建一个对象,但是在创建对象之后,它是一个常量,不能更改,并且对象被放置在字符串池中,这就

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

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,存储在字符串池中