繁体   English   中英

如何在java中调用重载方法

[英]How to call overload method in java

public class OverLoad {

    void method(Integer i){
        System.out.println("Integer "+i);
    }
    void method(int i){
        System.out.println("in "+i);
    }
    public static void main(String a[]){
        OverLoad m= new OverLoad();
        m.method(2); //it calls method(int i) why?    
    }
}

如果我调用m.method(3)它将调用int方法为什么? 如果我调用m.method((Integer)3)那么它将调用Integer方法。

默认情况下,它将进入原始数据类型

默认情况下,它将进入原始数据类型

是的,因为这是论证的确切类型。 文字2的类型是int ,而不是IntegerJLS 3.10.1 )。 它可以通过拳击转换( JLS 5.1.7 )转换为Integer ,但只有在实际需要时才会发生。

根据JLS 15.12.2 ,Java中的重载分三个阶段进行

第一阶段(§15.12.2.2)执行重载解析而不允许装箱或拆箱转换,或使用变量arity方法调用。 如果在此阶段没有找到适用的方法,则处理继续到第二阶段。

所以m.method(2)匹配第一阶段的method(int) ,因此不需要进入第二阶段。

那是因为2 一个原始整数 - 不是Integer类型的对象。

只有在找不到完美匹配签名(带有int)时才会发生自动装箱。

通过使用arguments (Integer)3调用,您可以强制编译器将int 3自动装箱到Integer对象中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM