¿Cómo se elige un método sobrecargado cuando un parámetro es el valor nulo literal?
Me encontré con esta pregunta en un cuestionario,
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);
}
}
La salida de este programa es "String Version". Pero no pude entender por qué al pasar un nulo a un método sobrecargado eligió la versión de cadena. ¿Es nula una variable de cadena apuntando a nada?
Sin embargo, cuando el código se cambia a,
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);
}
}
da un error de compilación que dice "El método del método (StringBuffer) es ambiguo para el tipo MoneyCalc"