Java 常量池是在 Java 運行環境中為了提高性能而引入的。它是指在編譯期和運行期中被同時使用的一個存儲器區域,用于存放編譯期與運行期中的各種字面量和符號引用。所以 Java 常量池也被稱為符號表。其中包括類名、方法名、字段名、接口名、字符串常量等。
在編譯期中,Java 常量池用于存放編譯期生成的常量,例如 String、int、float 等類型的常量;同時還包括對其他類、方法、字段的符號引用。這些常量被保存在 .class(.java 文件編譯后的文件)文件中的常量池表中。
public class ConstantPool { public static final int NUM = 10; public static final String STR = "Hello"; }
以上代碼中,NUM 和 STR 都是編譯期常量,會存放在常量池中。
在運行期中,Java 常量池用于存放運行期生成的常量,例如通過 String 類的 intern() 方法生成的字符串常量。其他各種字面量和符號引用也會在運行期被加載到常量池中。
public class RuntimeConstantPool { public static void main(String[] args) { String str1 = "Hello"; String str2 = "World"; String str3 = str1 + str2; String str4 = "HelloWorld"; System.out.println(str3 == str4); // true } }
以上代碼中,str1 和 str2 是兩個字符串常量,它們被編譯期存放在了常量池中;而 str3 是通過字符串拼接運行時生成的新字符串,由于常量池中已經存在 "HelloWorld" 這個字符串,所以 str3 引用的是常量池中的 "HelloWorld",而 str4 也是指向常量池中的 "HelloWorld"。所以 str3 和 str4 的比較結果為 true。
總之,Java 常量池在編譯期和運行期都發揮著重要的作用,通過使用常量池可以減少內存使用,提高性能,同時還能夠避免實例化出多份相同常量的內存浪費。
上一篇css3 點擊 旋轉