類常量池和運行時常量池的區別

首先常量池分為類編譯后的常量池和運行時常量池
類的常量池為類編譯后生成的 Constant pool:
在代碼運行時會將 上面 Constant pool 的內容加載到方法區(perm jdk1.8以后是metaspace)生成運行時常量池
運行時常量池。
關于String類型,如String a = "a" 在代碼運行時會先初始化到 SymbolTable符號表中(在方法區) 運行這行代碼時
將常量 a 拷貝到 堆中使用。

這里有兩個問題
1、 多個類定義了 String a="a" 這個字符串 在SymbolTable中只占一個內存空間 (來自笨神)
2、 多個類調用 String a= "a" 這條語句 只生成一個對象(1.7以后在堆中)

例:

String a="a"
String b="a"
System.out.println(a==b)  //true
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。