String、常量池以及intert方法
阿新 • • 發佈:2018-08-16
類常量 優化內存 java 類加載器 引用 名稱 intern 同時 不存在
.class文件常量池
常量池主要存放兩類常量:字面量和符號引用。
字面量指文本字符串等。
符號引用指:
- 類和接口的全限定名
- 字段的名稱和描述符
- 方法的名稱和描述符
編譯期結束,當類加載器加載類時,.class文件常量被加入運行常量池,如果常量已存在則不再加載。
.class文件常量對象(如String)被創建是預定好的,除非已常量已存在則不再加載。
String intern方法
String str1 = new String("Hello");
String str2 = new String("Hello");
String str1 = new String("Hello").intert(); String str2 = new String("Hello").intert();
intern方法可以再運行期往運行常量池中添加常量。
JDK7,intern方法檢查常量池中是否存在此String,如果存在返回常量池對應的引用;如果沒有,往常量池中添加該對象的引用,同時返回引用。
intert方法可以避免重復創建相同的String實例,優化內存。
此方法通過常量池判斷是否存在相同的String實例,如果存在,將引用指向同個對象,將其他相同但冗余的對象取消引用,利用內存回收機制回收new
創建的對象。如果不存在,在運行常量池加入該對象或其引用。
String、常量池以及intert方法