什么是字符串常量池?它的作用是什么?代码举例讲解

字符串常量池(String Constant Pool)是方法区的一部分,用于存储字符串常量。它的主要作用是节省内存空间,提高字符串操作效率。

字符串常量池的作用是:

  1. 当定义字符串常量时,如果常量池中已经存在等值的字符串,则返回常量池中的字符串,否则在常量池中创建一个新字符串并返回。
  2. 字符串常量池中的字符串只会有一份拷贝,节省内存空间。
  3. 可以快速判断两个字符串是否相等,只需要比较字符串常量池中对象的地址即可。
  4. 字符串常量池中的字符串是不可变的,每次操作返回的都是原对象。

来看一个简单示例:

String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo"; 

System.out.println(s1 == s2);      // true
System.out.println(s1 == s3);      // true

在该示例中:

  1. 定义第一个Hello字符串常量,存储在常量池中。
  2. 定义第二个Hello字符串常量,发现常量池已存在,返回第一个字符串常量。
  3. s3进行字符串拼接,但常量池已存在等值字符串,返回第一个字符串常量。
  4. s1、s2和s3指向常量池同一对象,比较地址为true。

理解字符串常量池可以让我们更好的管理字符串内存,节省空间,提高效率。