W jaki sposób wybrano metodę przeciążoną, gdy parametr jest literalną wartością zerową?

Natknąłem się na to pytanie w quizie,

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

Rezultatem tego programu jest „String Version”. Ale nie byłem w stanie zrozumieć, dlaczego przekazanie wartości null do metody przeciążonej wybrało wersję napisu. Czy null zmienna String wskazuje na nic?

Jednak po zmianie kodu na,

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

daje błąd kompilacji, mówiąc: „Metoda metody (StringBuffer) jest niejednoznaczna dla typu MoneyCalc”

questionAnswers(8)

yourAnswerToTheQuestion