Я наткнулся на этот вопрос в викторине,
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 перегруженному методу выбрала строковую версию. Является ли null переменной String, не указывающей ни на что?
Однако, когда код меняется на,
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);
}
}
он выдает ошибку компиляции: «Метод метода (StringBuffer) неоднозначен для типа MoneyCalc»