字符串常量池(String Constant Pool) 是 Java 中一块特殊的内存区域,用于存储字符串字面量(String literals)和某些字符串对象,目的是避免重复创建相同内容的字符串对象,节省内存、提高性能。
原因:永久代空间有限,容易 OOM;放到堆中便于 GC 管理。
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true
"abc" 是字符串字面量"abc" 时,直接复用池中已有的对象== 比较的是引用地址,因此为 trueString s1 = "abc";
"abc",就创建String s2 = new String("abc");
"abc" 在常量池中不存在,也会在常量池中创建一个s2 指向的是堆中的对象,不是常量池中的String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2); // false
String s1 = new String("abc");
String s2 = s1.intern();
System.out.println(s1 == s2); // false
System.out.println("abc" == s2); // true
✅ 字符串不可变(immutable)
✅ 池中的字符串可以被多个引用共享
✅ 字面量自动入池
✅ new String() 不一定入池
✅ intern() 可手动入池
String s = new String("abc");
✅ 1 或 2 个
"abc" 字面量:1 个(如果之前没有)new String():1 个(堆中)字符串常量池是 Java 为了复用字符串对象、节省内存而设计的一块内存区域,主要存放字符串字面量和 intern 后的字符串。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。