26

好奇心から、この例を試してみました。

public class Class1 {

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

    public void method(String str){
        System.out.println("String");
    }

    public static void main(String... arg){
        new Class1().method(null);
    }

}

出力は「文字列」です。JVMがオブジェクトではなく文字列を引数としてメソッドを呼び出すことを決定した理由を知りたいです。

4

7 に答える 7

2

Java コンパイラは、最も具体的な方法を選択します。

Stringは、 Objectと比較してより具体的なタイプです。

于 2013-07-16T06:57:40.023 に答える
0

メソッドの呼び出しでnullを渡し、void method(String str) を定義したため、String は常に null で初期化されます。一致するパラメータ化されたメソッドが見つかります。Thats yu はコンソールで「str」を取得しました。

于 2013-07-16T06:54:08.057 に答える
0

メソッドのオーバーロードを行っている場合、jvm は次の階層に移動しようとします。たとえば、long と int でメソッドをオーバーロードするが、byte を渡してメソッドを呼び出すと、階層内で byte の次であるため、最初に int に移動します。

于 2013-07-16T07:03:12.963 に答える
0

メソッドのオーバーロードが原因です

最も具体的な方法がコンパイル時に選択されます。

「java.lang.String」は「java.lang.Object」よりも具体的なタイプです。あなたの場合、文字列を返します。

于 2013-07-16T07:33:40.270 に答える