看了这个你就会明白
https://blog.csdn.net/luzhensmart/article/details/105679905
String是引用类型,两次new两个对象,new的时候赋值,这个“abc”因为是引用类型,所以也占了一个对象
String比较特殊,JVM对String类型做了优化,字符串常量池中会缓存出现过的String。下面分析:
首先,字面常量"abc"
会自动创建一个String对象,并放到JVM字符串常量池中缓存起来。创建对象1String str1 = new String("abc")
,是将上面缓存的String对象拿出来,并按照这个对象的值重新创建一个str1对象。创建对象2。String str2 = new String("abc")
,是JVM缓存的"abc"
对象拿出来,并按照这个对象的值重新创建一个str2对象。创建对象3。
所以总共是创建了三个对象。