Z
ZHANK
编程在线教程Java 教程包装类与自动装箱
核心类库

包装类与自动装箱

理解 Integer 缓存、自动装箱拆箱、进制转换

包装类与自动装箱

Java 的集合(如 List)只能存对象,不能直接存基本类型。包装类就是给每个基本类型套了个"对象壳",让 int 变成 Integer,可以放进集合。

学完本章你将: 理解装箱/拆箱、Integer 缓存池、字符串互转。


基本类型 → 包装类

java
// 8 种基本类型对应 8 种包装类
int    → Integer   // 最常用
long   → Long
double → Double
boolean → Boolean
char   → Character
byte   → Byte
short  → Short
float  → Float

自动装箱与拆箱 —— 编译器帮你

java
// 自动装箱:基本类型自动变包装类(编译器自动调用 Integer.valueOf())
Integer n = 100;  // 等价于 Integer n = Integer.valueOf(100);

// 自动拆箱:包装类自动变基本类型(编译器自动调用 intValue())
int m = n;        // 等价于 int m = n.intValue();

// 运算中也会自动拆箱
Integer a = 10, b = 20;
System.out.println(a + b); // 30 —— 两个 Integer 自动拆箱为 int 再相加

⚠️ NullPointerException 陷阱: 如果包装类是 null,自动拆箱会抛 NPE!

java
Integer x = null;
int y = x; // NPE!因为 x.intValue() 在 null 上调用

Integer 缓存池 —— 面试常考

java
// -128 ~ 127 之间的 Integer 被 JVM 缓存,复用同一对象
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true!取的是缓存池中同一个对象

Integer c = 200;  // 超出缓存范围
Integer d = 200;
System.out.println(c == d); // false!各自 new 了新对象

// 始终用 equals 比较值!
System.out.println(c.equals(d)); // true ✅

字符串互转

java
// String → 基本类型
int num = Integer.parseInt("42");
double pi = Double.parseDouble("3.14");
boolean flag = Boolean.parseBoolean("true");

// 基本类型 → String
String s1 = String.valueOf(100);
String s2 = Integer.toString(200);
String s3 = 300 + ""; // 最简便

Integer a = 100; Integer b = 100; System.out.println(a == b); // true(缓存池中同一对象)

Integer c = 200; Integer d = 200; System.out.println(c == d); // false(超出缓存范围)

// 始终用 equals 比较值 System.out.println(c.equals(d)); // true ✅


---

## 实用方法

```java
// 进制转换
System.out.println(Integer.toBinaryString(42));  // "101010"
System.out.println(Integer.toHexString(255));    // "ff"

// 最大/最小值
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648

// null 安全比较
Integer x = null;
// x + 1; // ❌ NullPointerException
int result = x != null ? x : 0; // 安全使用