「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Javaで「null」を過負荷の方法に渡すのはなぜ「string`パラメーターを使用してメソッドを呼び出すのですか?

Javaで「null」を過負荷の方法に渡すのはなぜ「string`パラメーターを使用してメソッドを呼び出すのですか?

2025-03-04に投稿されました
ブラウズ:127

Why does passing `null` to an overloaded method in Java call the method with the `String` parameter?

メソッドのオーバーロードとヌルパラメーター選択

はJavaで、メソッドがオーバーロードされると、同じ名前が異なるパラメーターリストで複数のメソッドが存在します。メソッドの呼び出しが行われると、コンパイラは、渡された実際の引数の数とタイプに基づいて呼び出すオーバーロードされた方法を決定します。 public voidメソッド(オブジェクトo){ system.out.println( "object verion"); } public void method(string s){ System.out.println( "Stringバージョン"); } public static void main(string args []){ MoneyCalc Question = new MoneyCalc(); question.method(null); } }

質問:
public class MoneyCalc {

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

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

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

回答:特定のタイプの値ではありませんが、オブジェクトや文字列を含む参照タイプの変数に割り当てることができます。 Java言語仕様(JLS)によれば、最も具体的な過負荷は、その適用性と特異性に基づいて選択されます。この場合、nullは両方の方法に適用できます。オブジェクトタイプと文字列の両方の変数に割り当てることができるためです。この場合、メソッド(文字列)の過負荷は、型文字列のみの引数のみを処理するように設計されているため、より具体的です。メソッド(オブジェクト)過負荷は、タイプオブジェクトまたはそのサブクラスの引数を処理できるため、より一般的です。

。コンパイラは、NULLリファレンスであるNULLの参照である方法でより具体的かつ適用できる方法(弦)バージョンを選択します。 MoneyCalcクラスでは、コンピレーションエラーが発生します。これは、この場合、メソッド(String)もメソッド(StringBuffer)が他の場合よりも具体的ではなく、メソッド選択のあいまいさにつながるためです。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3