我试图理解如何用conversions.Let调用重载的方法,我用我正在尝试的一个例子解释我的问题
public class Autoboxing {
public void meth(Integer i){
System.out.println("Integer");
}
public void meth(long i){
System.out.println("Long");
}
public void meth(int... i){
System.out.println("int");
}
public void meth(Object i){
System.out.println("Object");
}
public static void main(String[] args) {
Autoboxing box= new Autoboxing();
box.meth(5);
}
}这里的输出是:长
为什么带参数long的方法在包装器Integer.Please解释中被调用。
发布于 2015-10-29 08:26:35
当方法重载表单出现时,用户试图在以这种方式选择的编译器之间调用,
因此,在您的示例5中,是integer(primitive),因此它开始与int‘(1- case )匹配,但失败,因此尝试与更广泛的数据类型匹配。在这里,它与long(原语)匹配,后者比'int‘更宽
因此,您将得到"Long“输出。
因此,在重载场景出现时,编译器行为也同样出现。
发布于 2015-10-29 08:15:01
过载解算有三个阶段。第一阶段尝试在不使用自动装箱和varargs的情况下找到匹配方法(这就是为什么选择meth(long i)而不是meth(Integer i))。只有当第一阶段没有找到任何匹配时,第二阶段才试图找到一种与自动装箱相匹配的方法。
发布于 2015-10-29 08:30:42
我知道这里的优先级是第一位的,是加宽的,然后是自动装箱的,然后是静脉曲张。因为扩大原始参数比自动装箱要好得多。
https://stackoverflow.com/questions/33408936
复制相似问题