1.直接赋值(采用字面方式直接赋值)
String str1 = "aaa";
可能创建一个或者不创建对象。
首先,查找字符串池是否存在"aaa"这个字符对象。
a. 不存在,在字符串池中创建一个"aaa"对象,然后将字符串池中的这个"aaa"对象地址返回,赋给
引用变量str1,这样str1会指向字符串池中的这个"aaa"对象。
b. 存在,不创建对象,直接将字符串池中的这个"aaa"对象地址返回,赋给
引用变量str1,这样str1会指向字符串池中的这个"aaa"对象。
2.通过new新建对象
String str2 = new String("aaa")
至少创建一个对象,也可能两个。
new出来的对象都在堆中
首先,查找字符串池是否存在"aaa"这个字符对象。
a. 存在,在字符串池中不创建对象,直接在堆中创建这个"aaa"对象,然后将堆中的这个"aaa"对象
地址返回,赋给 引用变量str2,这样str2会指向堆中的这个"aaa"对象。
b. 不存在,先在字符串池中创建一个"aaa"对象,然后在堆中创建一个"aaa"对象,
然后将堆中的这个"aaa"对象地址返回,赋给 引用变量str2,这样str2会指向堆中的这个"aaa"对象。