ホームページ  >  記事  >  Java  >  メソッドのオーバーロードが Null 値で異なる動作をするのはなぜですか?

メソッドのオーバーロードが Null 値で異なる動作をするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 06:32:03456ブラウズ

Why Does Method Overloading Behave Differently with Null Values?

メソッドのオーバーロードと Null 値パラメーター

オーバーロードされたメソッドを使用すると、名前は同じでパラメーター リストが異なる複数のメソッドをクラス内に共存させることができます。オーバーロードされたメソッドを呼び出すとき、コンパイラは渡されたパラメータ リストに基づいて最も適切なメソッドを選択します。ただし、null 値がパラメーターとして渡されると、特定の動作が発生します。

次のコードを考えてみましょう。

public class MoneyCalc {

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

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

    public static void main(String[] args) {
        MoneyCalc question = new MoneyCalc();
        question.method(null);
    }
}

このコードでは、メソッドメソッドに null を渡すと、 「オブジェクトバージョン」の代わりに「文字列バージョン」が実行されます。これは、null が String を含む任意のクラス型に暗黙的に変換できるためです。したがって、コンパイラは、null 参照の推論された型に最もよく一致するメソッド オーバーロードを選択します。この場合は String です。

次に、コードを少し変更します。

public class MoneyCalc {

    public void method(StringBuffer sb) {
        System.out.println("StringBuffer Version");
    }

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

    public static void main(String[] args) {
        MoneyCalc question = new MoneyCalc();
        question.method(null);
    }
}

今回は、 StringBuffer メソッドと String メソッドの両方が null 参照に同様に適用できるため、あいまいさが発生します。どちらのメソッドも他のメソッドよりも具体的ではないため、コンパイラはこのコードに対してコンパイル時エラーを発生させます。

以上がメソッドのオーバーロードが Null 値で異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。