淺談java常量池。本站提示廣大學習愛好者:(淺談java常量池)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談java常量池正文
java常量池技巧
java中常量池技巧說的淺顯點就是java級其余緩存技巧,便利快捷的創立一個對象。當須要一個對象時,從池中去獲得(假如池中沒有,就創立一個並放入池中),當下次須要雷同變量的時刻,不消從新創立,從而節儉空間。
java八種根本類型的包裝類和對象池
java中的根本類型的包裝類、個中Byte、Boolean、Short、Character、Integer、Long完成了常量池技巧,(除Boolean,都只對小於128的值才支撐)
好比,Integer對象
Integer i1 = 100; Integer i2 = 100; // 下面兩行代碼,應用主動裝箱特征,編譯成 // Integer i1 = Integer.valueOf(100); // Integer i2 = Integer.valueOf(100); System.out.println(i1 == i2); Integer i3 = 128; Integer i4 = 128; System.out.println(i3 == i4);
履行成果:
true false
緣由我看下Integer對象的valueOf()的源碼
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; // 關於不在這個規模的就從新創立一個Integer對象 return new Integer(i); }
關於-128~127的Integer對象才會到IntegerCache裡獲得緩存,應用常量池技巧。
private static class IntegerCache { ... static final Integer cache[]; // IntegerCache類的cache是用final潤飾的,是個靜態數組,起到緩存的感化}
String類的常量池
String類型的常量池比擬特別,String類常量池在jdk7中放在了java heap中。應用辦法包含:
•直接應用字面量聲明,如String s = "abc";
•應用String.intern();
以上這篇淺談java常量池就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。