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

amb*_*bar 0 java overloading

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

想知道为什么编译器选择int一遍longString一遍的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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Pra*_*kar 5

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