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

Java 基本型別與包裝類完整指南:轉換、快取與最佳實踐

     編輯:Java 相關知識

為什麼需要包裝類?

Java 是面向對象語言,但八大基本型別(byte, short, int, long, float, double, char, boolean)不是對象,無法直接放入集合、泛型或作為 Object 參數傳遞。為了橋接這一鴻溝,Java 為每種基本型別提供了對應的包裝類:

基本型別包裝類常用常量
byteByteMIN_VALUE, MAX_VALUE, SIZE, BYTES
shortShortMIN_VALUE, MAX_VALUE, SIZE, BYTES
intIntegerMIN_VALUE, MAX_VALUE, SIZE, BYTES
longLongMIN_VALUE, MAX_VALUE, SIZE, BYTES
floatFloatMIN_VALUE, MAX_VALUE, MIN_NORMAL, MAX_EXPONENT...
doubleDoubleMIN_VALUE, MAX_VALUE, MIN_NORMAL, MAX_EXPONENT...
charCharacterMIN_VALUE, MAX_VALUE, SIZE, BYTES
booleanBooleanTRUE, FALSE

註:JDK 9 後新增 Void 對應 void,但無基本型別對應。

核心轉換機制

自動裝箱/拆箱

Integer i = 100;      // 裝箱:int -> Integer.valueOf(100)
int n = i;            // 拆箱:i.intValue()

編譯器自動插入 valueOf() 與 xxxValue() 呼叫,簡化代碼但隱藏性能開銷。

字串與基本型別互轉

// 字串 -> 基本型別(拋 NumberFormatException)
int a = Integer.parseInt("123");
double b = Double.parseDouble("3.14");

// 基本型別 -> 字串
String s1 = String.valueOf(456);      // 推薦:無 NPE 風險
String s2 = Integer.toString(789);    // 略快,僅限對應型別

Integer 快取機制深度解析

Integer.valueOf(int) 會快取 [-128, 127] 範圍內的實例:

Integer a = 100, b = 100;
System.out.println(a == b); // true(同一快取實例)

Integer c = 200, d = 200;
System.out.println(c == d); // false(新建對象)
  • 可透過 -XX:AutoBoxCacheMax=size 擴大快取上限(下限固定 -128)。
  • Long、Short、Byte、Character(0-127)同樣有快取;Float/Double 無快取。

常見陷阱與最佳實踐

陷阱後果正確做法
new Integer(100) 強制新建對象浪費記憶體、繞過快取統一用 Integer.valueOf() 或自動裝箱
拆箱時 NPEInteger i = null; int n = i; 拋 NPE先判空或用 Optional
集合存基本型別編譯錯誤用包裝類:List<Integer>
== 比較包裝類比較引用而非值用 equals() 或拆箱後比較
頻繁裝箱拆箱熱路徑GC 壓力、效能下降局部變數用基本型別、批量處理用陣列

JDK 9+ 新增靜態工廠方法

// 不再建議使用建構子(已標記 @Deprecated(since="9", forRemoval=true))
Integer i = Integer.valueOf("42");   // 字串解析
Integer j = Integer.valueOf(42);     // 數值轉換(走快取)

總結

理解基本型別與包裝類的轉換規則、快取範圍、空值風險,是寫出高效、健壯 Java 代碼的基礎。日常開發請遵循:優先用基本型別、必要時裝箱、拆箱前判空、比較用 equals。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved