Как выбирается перегруженный метод, когда параметр является буквальным нулевым значением?
Я столкнулся с этим вопросом в викторине,
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 "