Как выбирается перегруженный метод, когда параметр является буквальным нулевым значением?

Я столкнулся с этим вопросом в викторине,

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

Выход этой программы "Струнная версия ", Но я не смог понять, почему передача нулевого значения перегруженному методу выбрала строковую версию. Является ли переменная null строковой переменной, указывающей на ничто?

Однако, когда код изменяется на

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

это дает ошибку компиляции, говоря "Метод method (StringBuffer) неоднозначен для типа MoneyCalc "

Ответы на вопрос(8)

Ваш ответ на вопрос