Me deparei com esta questão em um teste,
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);
}
}
A saída deste programa é "String Version". Mas não consegui entender por que passar um nulo para um método sobrecarregado escolheu a versão de string. É null uma variável String apontando para nada?
No entanto, quando o código é alterado para,
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);
}
}
ele dá um erro de compilação dizendo "O método do método (StringBuffer) é ambíguo para o tipo MoneyCalc"