1. 程式人生 > >Class常量池、執行時常量池、字串常量池的一些思考

Class常量池、執行時常量池、字串常量池的一些思考

## Class常量池、執行時常量池、字串常量池 ### class常量池 java程式碼經過編譯之後都成了xxx.class檔案,這是java引以為傲的可移植性的基石。class檔案中,在CAFEBABE、主次版本號之後就是常量池入口了,入口是一個u2型別的資料,也就是佔據2個位元組,用來給常量池的容量計數,假設這個u2的數字為0x0016,那麼對應十進位制為22,那麼常量池中右21個常量,1-21,其中第0個用於表達“不引用任何一個常量”。在這兩個位元組之後就是編譯器為我們生成的常量了,這些常量包含了兩大類:**字面量**和**符號引用**,通過一個例子看一下: ```java public class ThreePoolDemo { int a=1; } ``` javap反編譯結果如下: ``` Classfile Constant pool: #1 = Class #2 // com/hustdj/jdkStudy/threePool/ThreePoolDemo #2 = Utf8 com/hustdj/jdkStudy/threePool/ThreePoolDemo #3 = Class #4 // java/lang/Object #4 = Utf8 java/lang/Object #5 = Utf8 a #6 = Utf8 I #7 = Utf8