首先要明确String s = new String(“xyz”)是创建了两个对象
一个是字符串xyz,一个是String类型的对象,s这里是个引用变量
而对象一般通过new在堆中创建。
所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,
在编译阶段,会把字符串文字放在常量池中,
常量池的一个好处就是可以把相同的字符串合并,占用一个空间,我们可以用==判断一下两个引用变量是否指向了一个地址即一个对象
而这里的“xyz”就是常量池中的一个对象,在我们 new String()时,把常量池中的字符串"xyz"复制到堆中,
并把这个对象的应用交给s,所以创建了两个String对象,一个在池中,一个在堆中。
再来说常量池,根据名字来看,就是放常量的地方,可以使得我们定义的字符串等再运行中不会变化
|