Class常量池、執行時常量池、字串常量池的一些思考
阿新 • • 發佈:2020-12-11
## 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