Я столкнулся с этим вопросом в викторине,
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"