1. 程式人生 > >String、常量池以及intert方法

String、常量池以及intert方法

類常量 優化內存 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方法