程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java 常量池,java常量

java 常量池,java常量

編輯:JAVA綜合教程

java 常量池,java常量


java常量池技術

  java中常量池技術說的通俗點就是java級別的緩存技術,方便快捷的創建一個對象。當需要一個對象時,從池中去獲取(如果池中沒有,就創建一個並放入池中),當下次需要相同變量的時候,不用重新創建,從而節省空間。

java八種基本類型的包裝類和對象池

  java中的基本類型的包裝類、其中Byte、Boolean、Short、Character、Integer、Long實現了常量池技術,(除了Boolean,都只對小於128的值才支持)

比如,Integer對象

 1 Integer i1 = 100;
 2 Integer i2 = 100;
 3 // 上面兩行代碼,使用自動裝箱特性,編譯成
 4 // Integer i1 = Integer.valueOf(100);
 5 // Integer i2 = Integer.valueOf(100);
 7 System.out.println(i1 == i2);
 8 
 9 Integer i3 = 128;
10 Integer i4 = 128;
11 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();

 

參照:

百度百科:http://baike.baidu.com/view/8680346.htm

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved