首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Boolean 對象創建三種方式對比:new Boolean()、valueOf()、自動裝箱性能差異

     編輯:Java 相關知識

三種創建方式

  1. new Boolean(true):每次創建新對象
  2. Boolean.valueOf(true):返回常量池單例 Boolean.TRUE/FALSE
  3. Boolean b = true;:自動裝箱,編譯器轉為 Boolean.valueOf()

身份比較實驗

Boolean[] a1 = new Boolean[100];
Boolean[] a2 = new Boolean[100];
Boolean[] a3 = new Boolean[100];
for (int i=0; i<100; i++) a1[i] = Boolean.valueOf(true);
for (int i=0; i<100; i++) a2[i] = new Boolean(true);
for (int i=0; i<100; i++) a3[i] = true; // 自動裝箱
System.out.println("valueOf: " + (a1[0] == a1[1])); // true
System.out.println("new: " + (a2[0] == a2[1]));     // false
System.out.println("auto: " + (a3[0] == a3[1]));    // true

結果分析

  • valueOf/自動裝箱:復用 Boolean.TRUE/FALSE 靜態常量,== 為 true,節省內存、減少 GC 壓力
  • new Boolean():每次在堆上分配新對象,== 為 false,浪費內存、增加 GC

源碼佐證

// Boolean.valueOf 源碼 (JDK 8)
public static Boolean valueOf(boolean b) {
    return b ? TRUE : FALSE; // 直接返回靜態常量
}
// 自動裝箱編譯後等同於 valueOf 調用

最佳實踐

  1. 優先使用 Boolean.valueOf() 或直接賦值(自動裝箱)
  2. 避免 new Boolean(),除非極少數需要區分對象身份的場景
  3. 同理適用於 Integer(-128~127 緩存)、Long、Short、Byte、Character(0~127 緩存)
  4. 集合存儲大量 Boolean 時,考慮 BitSet 或原始類型數組 boolean[] 更節省空間

性能數據參考

操作100萬次耗時內存分配
Boolean.valueOf(true)~5ms0 Byte(常量復用)
new Boolean(true)~45ms~16MB(對象頭+字段)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved