String对象创建过程
方式一:
String s1 = "abc";
- 如果常量池中没有"abc",会先在常量池中创建“abc”,并指向改地址。如果常量池里有abc,就直接指向该地址。
方式二:
String s2 = new String("abc");
- 第一次创建,常量池中没有abc先在常量池中创建abc,然后在堆中创建内存并指向常量池。如果常量池中有会直接使用
- 所以方式二会创建两个(或一个)对象,一个在常量池中,一个在堆内存中
顺便说一个字符串不可变问题:
String s1 = "hello";
s1 = "world";
- 每次赋值都是创建一个对象并指向该对象,以前的对象还在内存中