intValue()是Number类定义的抽象方法,由数值包装类实现,用于将包装对象转为int值;如Integer.valueOf(42).intValue()返回42,Double.valueOf(3.14).intValue()返回3。

自动装箱与拆箱是 Java 5 引入的语法糖,本质是编译器在背后自动调用包装类的 valueOf() 和 intValue() 方法。其中,intValue() 是拆箱的核心操作,它把包装对象还原为对应的基本类型值。
intValue() 是什么
intValue() 是 java.lang.Number 抽象类定义的抽象方法,所有数值型包装类(Integer、Double、Long 等)都继承并实现了它。它的作用只有一个:以 int 类型返回该对象所封装的数值。
-
new Integer(42).intValue()→ 返回42(int类型) -
new Double(3.14).intValue()→ 返回3(直接截断小数部分) -
new Long(1000L).intValue()→ 返回1000(在 int 范围内则精确转换)
自动拆箱如何触发 intValue()
当你把一个包装类对象当作基本类型来用时,编译器会自动插入 intValue() 调用:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
Integer a = 100; int b = a;→ 编译后等价于int b = a.intValue(); -
ArrayList<integer> list = new ArrayList(); list.add(5); int x = list.get(0);</integer>→get(0)返回Integer,赋值给int x时自动调用intValue() -
Integer i = 8; i + 2;→ 先拆箱成i.intValue() + 2,再参与算术运算
为什么不用构造器或 new?
intValue() 是实例方法,不创建新对象,只读取已有值。它轻量、无副作用,和装箱时的 valueOf() 形成对称设计:
立即学习“Java免费学习笔记(深入)”;
- 装箱(如
int → Integer)优先走Integer.valueOf(int),利用缓存提升性能 - 拆箱(如
Integer → int)必须走intValue(),因为这是唯一标准的“取值”出口 - 不能用
new Integer(i).intValue()来替代——那会无谓创建对象,违背拆箱本意
注意常见陷阱
拆箱看似简单,但可能引发空指针异常或隐式类型丢失:
-
Integer i = null; int j = i;→ 运行时报NullPointerException(因为调用了null.intValue()) -
Double d = 123.456; int k = d;→ 实际执行d.intValue(),结果是123,小数部分被静默丢弃 - 比较时慎用
==:它比的是引用;要比较值,应使用.equals()或先拆箱再比

















