本周对Java字符串的理解更深了一步。
- Java中的字符串是不可变类型,即在进行字符串加减操作时,每次都会重新返回一个新的对象,原来的对象仍然存储在字符串常量池中。
- 那么,什么是字符串常量池呢?字符串都存储在字符串常量池中,如果新建的一个字符串在常量池中已经存在,则直接返回其引用,有如下操作:
点击查看代码
public static void main(String[] args) {
String a = \"abc\";
String b = \"abc\";
System.out.println(a == b);
}
在新建字符串 b 时,由于字符串常量池中已经存在\"abc\",所以直接返回其索引,在输出System.out.println(a == b)
时,输出的是true.使用字符串常量池,可以节省空间,获取效率也比较高。
3. 而new String()
是另一种创建字符串的方式。如果常量池中不存在该字符串,则会先在常量池中创建该字符串。然后在堆内存中创建字符串对象,随后返回该字符串的引用,有如下操作:
点击查看代码
public static void main(String[] args) {
String a = \"aa\";
String b = new String(\"aa\");
System.out.println(a == b);
}
该方法输出false,因为new String()
返回的是堆内存的地址,而字面创建字符串返回的是字符串常量池的地址。
4. 此外,字符串还存在intern方法,在执行该方法时,如果字符串常量池中不存在该字符串,则先创建,然后返回常量池中的引用。
来源:https://www.cnblogs.com/Perfecto7/p/15965974.html
本站部分图文来源于网络,如有侵权请联系删除。