那是因为2 是一个原始整数 - 不是类型的对象Integer
.
只有在找不到完美匹配签名(带有int)时才会发生自动装箱.
通过使用参数调用,(Integer)3
您可以强制编译器将您自动int
3
装入Integer
对象中.
默认情况下,它将进入原始数据类型
是的,因为这是论证的确切类型.类型字面的2
是int
,不Integer
(JLS 3.10.1).它可以转换为Integer
通过拳击转换(JLS 5.1.7),但只有在实际需要时才会发生.
根据JLS 15.12.2,Java中的重载分三个阶段进行:
第一阶段(§15.12.2.2)执行重载解析而不允许装箱或拆箱转换,或使用变量arity方法调用.如果在此阶段没有找到适用的方法,则处理继续到第二阶段.
因此在第一阶段m.method(2)
匹配method(int)
,因此不需要进入第二阶段.
那是因为2 是一个原始整数 - 不是类型的对象Integer
.
只有在找不到完美匹配签名(带有int)时才会发生自动装箱.
通过使用参数调用,(Integer)3
您可以强制编译器将您自动int
3
装入Integer
对象中.