String类比较特殊,它有个字符串常量池,那篇博客中提到过。字符串常量池中相同字符串只能有一份,但new构造器的则不同,每次调用构造器,都在堆内存中创建一个字符串对象,无论字符串常量池是否存在该字符串。在堆内存中,相同的字符串可以存在多个。
这个题String s2 = new String("abc");
它会在堆内存中创建“abc”字符串,同时检查字符串常量池是否存在这个这符串,如果没有,将在字符串常量池创建这个字符串对象,两者的地址是不一样的。s2得到的是堆内存中字符串的地址。
String s = “abc”;这种方式创建时,创建的字符串常量存在于字符串常量池中,返回的是字符串常量池中字符串的地址。 |