什么是包裝類
Java包裝類(Wrapper Classes)是將8種基本數據類型封裝成對象的類,位于java.lang包中。每個基本數據類型都有對應的包裝類:
- byte → Byte
- short → Short
- int → Integer
- long → Long
- float → Float
- double → Double
- char → Character
- boolean → Boolean
包裝類的主要用途:
- 讓基本數據類型具有對象的特征,可以調用方法
- 用于集合框架(如ArrayList只能存儲對象)
- 提供各種實用的方法(如類型轉換)
裝箱與拆箱
裝箱(Boxing):將基本數據類型轉換為對應的包裝類對象
int num = 10;
// 手動裝箱
Integer integerObj =new Integer(10);
拆箱(Unboxing):將包裝類對象轉換為對應的基本數據類型
Integer integerObj = new Integer(20);
// 手動拆箱
int num = integerObj.intValue();
自動裝箱和拆箱
從Java 5開始引入的自動裝箱(Autoboxing)和自動拆箱(Auto-unboxing)特性:
// 自動裝箱
Integer a = 100; // 編譯器自動轉換為 Integer a = new Integer(100)// 自動拆箱
int b = a; // 編譯器自動轉換為 int b = a.intValue()
實際應用場景示例:
ArrayList<Integer> list = new ArrayList<>();
list.add(5); // 自動裝箱
int first = list.get(0); // 自動拆箱
注意事項:
- 自動裝箱會使用緩存(如Integer緩存-128到127的值)
- 頻繁裝箱拆箱會影響性能(如在循環中)
包裝類常用方法使用
1. 類型轉換方法
// String轉換為Integer
Integer num1 = Integer.parseInt("123");
Integer num2 = Integer.valueOf("456");// Integer轉換為String
String str = Integer.toString(789);
String str2 = num1.toString();// 進制轉換
String binary = Integer.toBinaryString(10); // "1010"
String hex = Integer.toHexString(255); // "ff"
2. 比較方法
Integer x = 10;
Integer y = 20;// 比較兩個Integer對象的值
System.out.println(x.compareTo(y)); // -1 (x < y)
System.out.println(Integer.compare(x, y)); // -1// 比較自動裝箱的對象(注意緩存范圍)
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (在緩存范圍內)Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false (超出緩存范圍)
3. 其他實用方法
// 最大值/最小值常量
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648// 判斷字符類型
System.out.println(Character.isDigit('9')); // true
System.out.println(Character.isLetter('A')); // true
System.out.println(Character.isWhitespace(' ')); // true// 浮點數特殊值檢查
Double d = Double.NaN;
System.out.println(Double.isNaN(d)); // true
System.out.println(Double.isInfinite(Double.POSITIVE_INFINITY)); // true
4. 數值運算
// 數值運算需要先拆箱
Integer num1 = 10;
Integer num2 = 20;
int sum = num1 + num2; // 自動拆箱后運算// 使用包裝類方法
System.out.println(Integer.sum(num1, num2)); // 30
System.out.println(Integer.max(num1, num2)); // 20