new String 创建了几个对象?

为什么是创建了三个对象?

img

难道是 new 占一个,声明加赋值又占一个?

看了这个你就会明白
https://blog.csdn.net/luzhensmart/article/details/105679905

String是引用类型,两次new两个对象,new的时候赋值,这个“abc”因为是引用类型,所以也占了一个对象

img


string 是引用类型,创建了一个就算一个,不会像int类型那样赋值就是修改值,它的赋值不叫修改,叫创建,然后至于为什么是三个,是因为string("abc")是相同的占位符,自带的框架就已经知道这个是同一个东西,如果是string("abc") 和string("abcd"),那就是4个了

String比较特殊,JVM对String类型做了优化,字符串常量池中会缓存出现过的String。下面分析:
首先,字面常量"abc"会自动创建一个String对象,并放到JVM字符串常量池中缓存起来。创建对象1
String str1 = new String("abc"),是将上面缓存的String对象拿出来,并按照这个对象的值重新创建一个str1对象。创建对象2。
String str2 = new String("abc"),是JVM缓存的"abc"对象拿出来,并按照这个对象的值重新创建一个str2对象。创建对象3。

所以总共是创建了三个对象。