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);
}
}
Dane wyjściowe tego programu to „Wersja ciągu”. Ale nie byłem w stanie zrozumieć, dlaczego przekazanie wartości null do przeciążonej metody wybrało wersję łańcuchową. Czy null jest zmienną typu String wskazującą na nic?
Jednak gdy kod zostanie zmieniony 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);
}
}
zwraca błąd kompilacji, mówiąc: „Metoda metody (StringBuffer) jest niejednoznaczna dla typu MoneyCalc”