方法调用转换

Muk*_*esh 4 java autoboxing

我试图了解如何通过转换调用重载方法.让我用我正在尝试的示例解释我的问题

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的输出是:长

为什么在Wrapper Integer中调用带有参数long的方法.请解释.

Era*_*ran 5

重载分辨率有三个阶段.第一阶段试图找到一个匹配的方法,而不使用自动装箱和varargs(这是为什么meth(long i)选择而不是meth(Integer i)).仅当第一阶段没有找到任何匹配时,第二阶段才会尝试使用自动装箱找到匹配方法.