victory的博客

长安一片月,万户捣衣声

0%

Java | 字符串常量池

字符串常量池

首先来看下面一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {
public static void main(String[] args){
String a = "abc";
String b = "abc";
String c = "ab" + "c";
String d = "a" + "bc";
String e = "a" + "b" + "c";
String f = new String("abc");

System.out.println(a == b);//true
System.out.println(a == c);//true
System.out.println(a == d);//true
System.out.println(a == e);//true
System.out.println(a == f);//false
}
}
  • 在使用String a = “abc”创建字符串对象时,JVM会使用常量池来管理字符串直接量。在执行该语句时,JVM会先检查常量池中是否已经存有”abc”,
    若没有则将”abc”存入常量池,否则就复用常量池中已有的”abc”,将其引用赋值给变量a。
  • 在使用new String(“abc”)创建字符串对象时,JVM会先使用常量池来管理字符串直接量,即将”abc”存入常量池。然后再创建一个新的String对象,
    这个对象会被保存在堆内存中。并且,堆中对象的数据会指向常量池中的直接量。