Wie wird eine überladene Methode ausgewählt, wenn ein Parameter der Literal-Null-Wert ist?

Ich bin auf diese Frage in einem Quiz gestoßen,

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);
   }
}

Die Ausgabe dieses Programms ist "String Version". Aber ich konnte nicht verstehen, warum die Übergabe einer Null an eine überladene Methode die String-Version auswählte. Ist null eine String-Variable, die auf nichts zeigt?

Wenn jedoch der Code geändert wird,

public class MoneyCalc {

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

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

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

Es wird ein Kompilierungsfehler ausgegeben, der besagt, dass die Methode method (StringBuffer) für den Typ MoneyCalc nicht eindeutig ist.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage