java常量池技術(shù)
java中常量池技術(shù)說(shuō)的通俗點(diǎn)就是java級(jí)別的緩存技術(shù),方便快捷的創(chuàng)建一個(gè)對(duì)象。當(dāng)需要一個(gè)對(duì)象時(shí),從池中去獲取(如果池中沒(méi)有,就創(chuàng)建一個(gè)并放入池中),當(dāng)下次需要相同變量的時(shí)候,不用重新創(chuàng)建,從而節(jié)省空間。
java八種基本類型的包裝類和對(duì)象池
java中的基本類型的包裝類、其中Byte、Boolean、Short、Character、Integer、Long實(shí)現(xiàn)了常量池技術(shù),(除了Boolean,都只對(duì)小于128的值才支持)
比如,Integer對(duì)象
1
2
3
4
5
6
7
8
9
10
|
Integer i1 = 100 ; Integer i2 = 100 ; // 上面兩行代碼,使用自動(dòng)裝箱特性,編譯成 // 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); |
執(zhí)行結(jié)果:
1
2
|
true false |
原因我看下Integer對(duì)象的valueOf()的源碼
1
2
3
4
5
6
7
8
|
public static Integer valueOf( int i) { assert IntegerCache.high >= 127 ; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; // 對(duì)于不在這個(gè)范圍的就重新創(chuàng)建一個(gè)Integer對(duì)象 return new Integer(i); } |
對(duì)于-128~127的Integer對(duì)象才會(huì)到IntegerCache里獲取緩存,使用常量池技術(shù)。
1
2
|
private static class IntegerCache { ... static final Integer cache[]; // IntegerCache類的cache是用final修飾的,是個(gè)靜態(tài)數(shù)組,起到緩存的作用} |
String類的常量池
String類型的常量池比較特殊,String類常量池在jdk7中放在了java heap中。使用方法包括:
•直接使用字面量聲明,如String s = "abc";
•使用String.intern();
以上這篇淺談java常量池就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。