编译器将不考虑向下转换,而是考虑取消装箱转换以解决过载。在这里,
Integer
i将
int成功拆箱。
String未考虑此方法,因为
Integer无法将扩展为
String。唯一可能的过载是考虑拆箱的过载,因此
8被打印出来。
第一个代码输出的原因
10是,编译器将考虑将取消引用转换(
Integerto
Object)扩展到取消装箱转换。
JLS的15.12.2节在考虑适用哪些方法时指出:
1.
第一阶段(第15.12.2.2节)执行重载解析,不允许装箱或拆箱转换,也不允许使用可变Arity方法调用。如果在此阶段未找到适用的方法,则处理将继续进行到第二阶段。
- 第二阶段(第15.12.2.3节)执行重载解析,同时允许装箱和拆箱[…]



