繁体   English   中英

Java中关于带有int / long和String / object的参数的方法重载

[英]Method overloading in java regarding arguments with int/long and String/object

对于以下程序,为什么要调用具有int和String参数的方法而不是long和Object?

想知道为什么编译器选择int代替long参数,而选择String代替Object参数。

注意:这是在采访中问到的。

public class MethodOverloadingTest {

    public static void add(int n, int m){
        System.out.println("Int method");
        System.out.println(n+m);
    }

    public static void add(long n, long m){
        System.out.println("Long method");
        System.out.println(n+m);
    }

    public static void method(String st){
        System.out.println("from String method");
    }

    public static void method(Object obj){
        System.out.println("from Object method");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        add(2,3);
        method(null);
    }

}

对于add(2,3)方法,您要传递整数,这就是为什么要调用整数的原因。 对于method(null) ,选择最具体的方法参数。 在这种情况下, StringObject更具体。 因此method(String st); 被叫。

该概念称为“早期绑定”。 最具体的方法(基于参数)是在编译时选择的。

Object是java中最具体的类,因为它是所有类的超类。

如果多个成员方法既可访问又可应用于方法调用,则必须选择一个成员方法来为运行时方法分派提供描述符。 Java编程语言使用选择最具体方法的规则。

选择方式在规则集中给出,此处指定

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5

这很简单,因为Java默认将数字视为int,将字母视为字符串对象,而不是通用对象。

因此,当您传递add(2,3)时,它将参数作为普通int

调用add(long,long)将参数传递为; add(2.0,4.0)像这样。 并用于调用函数method(object)

1.首先对您的字符串进行类型转换以键入对象String str; str =(对象)“ Hello world”;

2.然后传递给方法(str);

暂无
暂无

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

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