自动装箱使int字面量可传给integer参数,编译器在重载解析中优先精确匹配int版本,无则执行一步装箱转换;重写要求参数类型完全一致,新增int版本属重载而非重写。

传入 int 字面量(比如 5)会自动装箱为 Integer,方法能正常调用。
自动装箱让基本类型可传给包装类参数
Java 编译器在重载解析阶段,若找不到精确匹配的 int 版本,且存在 Integer 版本,就会执行自动装箱:把 int 值包装成 Integer 对象再传入。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如有
void process(Integer x),调用process(42)是合法的,等价于process(Integer.valueOf(42)) - 这属于“一步装箱转换”,在重载匹配优先级中排在“精确匹配”之后、“可变参数”之前
- 注意:装箱过程不改变值语义,但涉及对象创建(小整数如 -128~127 可能复用缓存对象)
但如果同时存在 int 和 Integer 两个重载版本
编译器会优先选择 int 版本,因为基本类型匹配比装箱更“精确”。
-
process(42)→ 匹配process(int x),不会走Integer版本 -
process(null)→ 若只有process(Integer x)和process(String s),则报错:ambiguous reference -
process(new Integer(42))→ 明确传入对象,直接命中Integer版本,不触发装箱
重写场景下要区分“重载”和“重写”
题目中说“重写一个接受 Integer 的方法”,但严格来说:重写(override)不改变参数类型。如果你在子类里把父类的 void f(Integer x) 改成 void f(int x),这不是重写,而是定义了一个新方法(重载),且会破坏多态契约。
- 真正的重写要求签名完全一致:方法名、参数类型、数量、顺序都相同
- 所以子类重写
f(Integer x),仍必须接收Integer;此时传int同样触发自动装箱 - 若想支持
int直接调用,应在同一类中额外提供重载版本:f(int x)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










