核心方法
Integer 是 int 的包装类(Wrapper Class),它提供了在面向对象的世界中操作基本类型 int 的能力。

使用 .intValue() (显式转换)
这是最直接、最明确的方法。Integer 类中有一个名为 intValue() 的实例方法,它的作用就是返回该 Integer 对象所包含的 int 值。
语法:
int primitiveInt = integerObject.intValue();
示例代码:
public class IntegerToIntExample {
public static void main(String[] args) {
// 1. 创建一个 Integer 对象
Integer myInteger = 100;
// 2. 使用 intValue() 方法将其转换为 int
int myInt = myInteger.intValue();
// 验证类型和值
System.out.println("myInteger 的类型是: " + myInteger.getClass().getName()); // 输出 java.lang.Integer
System.out.println("myInt 的类型是: " + ((Object)myInt).getClass().getName()); // 输出 int (通过强制转Object来打印)
System.out.println("转换后的值: " + myInt); // 输出 100
// 验证它们是不同的对象
System.out.println("myInteger == myInt ? " + (myInteger == myInt)); // 输出 false,因为一个是对象,一个是基本类型
}
}
优点:

- 代码清晰明确:一眼就能看出你正在进行从
Integer到int的转换。 - 适用于所有版本:这是 Java 从一开始就存在的方法。
自动拆箱 (Unboxing) (推荐,更简洁)
从 Java 5 开始,引入了自动拆箱和自动装箱(Autoboxing/Unboxing)机制。
- 自动装箱:Java 会自动将基本类型
int转换为Integer对象。Integer i = 10;。 - 自动拆箱:Java 会自动将
Integer对象转换回int基本类型,这个过程在需要int的地方自动发生。
语法:
int primitiveInt = integerObject;
示例代码:
public class AutoUnboxingExample {
public static void main(String[] args) {
// 1. 创建一个 Integer 对象
Integer myInteger = 200;
// 2. 直接赋值给 int 类型变量,Java 会自动调用 intValue()
int myInt = myInteger;
// 验证
System.out.println("myInteger 的值: " + myInteger); // 输出 200
System.out.println("myInt 的值: " + myInt); // 输出 200
System.out.println("myInteger == myInt ? " + (myInteger == myInt)); // 输出 false
}
}
优点:

- 代码简洁:无需调用任何方法,语法更自然、更易读。
- 现代 Java 的标准做法:在绝大多数情况下,都应该使用自动拆箱。
⚠️ 重要陷阱:处理 null 值
当 Integer 对象的值为 null 时,直接使用上述两种方法都会抛出 NullPointerException。
错误示例:
public class NullPointerExample {
public static void main(String[] args) {
Integer myNullInteger = null;
// 这行代码会抛出 NullPointerException
int myInt = myNullInteger; // 尝试对 null 进行自动拆箱
// 或者
// int myInt = myNullInteger.intValue(); // 同样会抛出 NullPointerException
}
}
如何安全地处理 null?
在实际开发中,你经常会遇到可能为 null 的 Integer,以下是几种安全的处理方式:
使用三元运算符 (Ternary Operator)
这是最简单直接的方式,提供一个默认值。
Integer myNullInteger = null; int myInt = (myNullInteger != null) ? myNullInteger : 0; // 如果为 null,则 myInt 的值为 0 System.out.println(myInt); // 输出 0
使用 java.util.Optional (Java 8+)
Optional 是一个容器对象,它可以包含或者不包含非 null 的值,这是处理可能为 null 的值的现代、优雅的方式。
import java.util.Optional;
Integer myNullInteger = null;
// 如果值存在,则进行转换;如果不存在,则返回一个指定的默认值
int myInt = Optional.ofNullable(myNullInteger).orElse(0); // orElse 会在 Optional 为空时返回 0
// 如果值存在,则进行转换;如果不存在,则抛出一个指定的异常
// int myInt = Optional.ofNullable(myNullInteger).orElseThrow(() -> new IllegalArgumentException("Integer value cannot be null"));
System.out.println(myInt); // 输出 0
使用 Objects.requireNonNullElse (Java 9+)
如果你使用的是 Java 9 或更高版本,java.util.Objects 类提供了一个非常方便的工具方法。
import java.util.Objects; Integer myNullInteger = null; // 如果第一个参数为 null,则返回第二个参数 int myInt = Objects.requireNonNullElse(myNullInteger, 0); System.out.println(myInt); // 输出 0
| 方法 | 语法 | 优点 | 缺点/注意事项 |
|---|---|---|---|
.intValue() |
int i = obj.intValue(); |
明确、清晰,适用于所有 Java 版本 | 代码稍显冗长 |
| 自动拆箱 | int i = obj; |
代码简洁,可读性高 | 当 obj 为 null 时会抛出 NullPointerException |
| 安全处理 | int i = (obj != null) ? obj : 0; |
安全,防止 NullPointerException |
需要手动编写条件判断 |
Optional |
int i = Optional.ofNullable(obj).orElse(0); |
现代、优雅,功能强大,能清晰地表达“可能为空”的意图 | 需要 Java 8+,对于简单场景可能略显“重” |
Objects.requireNonNullElse |
int i = Objects.requireNonNullElse(obj, 0); |
非常简洁,专为解决此问题而生 | 需要 Java 9+ |
最佳实践建议:
- 在确定
Integer对象不为null的情况下,优先使用自动拆箱,这是最简洁、最符合现代 Java 编码风格的做法。 - 在处理可能为
null的Integer时,务必使用安全措施,根据你的 Java 版本和个人/团队偏好,选择三元运算符、Optional或Objects.requireNonNullElse。Optional是最能表达代码意图的方案。
