Java軟件低級錯誤(十 六):使用包裝器對象帶來的低效問題

 

解讀:
每個基本類型(primitive)都有相應的包裝器(wrapper)對象:Integer、Long、Float、Double、Short、Byte、Character和Boolean,我們在使用時不要直接new Integer對象(這樣的做法是低效的),而應該調用包裝器對象的valueOf方法。

案例:


//初始化操作結果標識,-1爲操作失敗
Integer result = new Integer(-1);

爲什麼以上代碼是低效的,而要使用Integer result = Integer.valueOf(-1)或者Integer result = -1來代替?我們來看看JDK的Integer.valueOf方法實現


public static Integer valueOf(int i){
  final int offset = 128;
  if(i >= -128 && i <= 127){
      return IntegerCache.cache[i + offset];
  }
    return new Integer(i);
}

可以看到內存中已經緩存有-128到127這個區間的256個Integer對象,如果方法傳入的i值介於這個範圍就不用再new Integer對象了,省去了運行時間,也節省了內存資源。另外的幾個包裝器對象( Long、Short、Byte、Character和Boolean )類似。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章