字符串常量池(String Constant Pool)是方法区的一部分,用于存储字符串常量。它的主要作用是节省内存空间,提高字符串操作效率。
字符串常量池的作用是:
- 当定义字符串常量时,如果常量池中已经存在等值的字符串,则返回常量池中的字符串,否则在常量池中创建一个新字符串并返回。
- 字符串常量池中的字符串只会有一份拷贝,节省内存空间。
- 可以快速判断两个字符串是否相等,只需要比较字符串常量池中对象的地址即可。
- 字符串常量池中的字符串是不可变的,每次操作返回的都是原对象。
来看一个简单示例:
String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo";
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // true
在该示例中:
- 定义第一个Hello字符串常量,存储在常量池中。
- 定义第二个Hello字符串常量,发现常量池已存在,返回第一个字符串常量。
- s3进行字符串拼接,但常量池已存在等值字符串,返回第一个字符串常量。
- s1、s2和s3指向常量池同一对象,比较地址为true。
理解字符串常量池可以让我们更好的管理字符串内存,节省空间,提高效率。