2010-10-13 12 views
9

¿Por qué esta salida: "dentro del método de argumento de cadena"? ¿No es nulo el tipo de "Objeto"?¿Tiene nulo el tipo de objeto?

class A { 
    void printVal(String obj) { 
     System.out.println("inside String argument method"); 
    } 

    void printVal(Object obj) { 
     System.out.println("inside Object argument method"); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     a.printVal(null); 
    } 
} 
+1

Wow crazy. Solo intenté agregar una tercera sobrecarga 'printVal',' printVal (Obj entero) 'para ver qué pasaría. Ahora 'a.printVal (null)' es un error del compilador, debido a la ambigüedad. Buena pregunta. – mgiuca

Respuesta

3

Sí, pero es también nula tipo String y todos los otros tipos, por lo que se selecciona el método más específico para llamar.

1

Más específicamente, un nullliteral llamará a la versión String, por las razones indicadas por las otras respuestas.

Por otro lado:

class A { 
    void printVal(String obj) { 
     System.out.println("inside String argument method"); 
    } 

    void printVal(Object obj) { 
     System.out.println("inside Object argument method"); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     Object myObj = null; 
     a.printVal(myObj); 
    } 
} 

imprimirá "dentro método argumento de objeto". Al igual que la configuración del tipo para myObj a cualquier tipo que no sea String.

Cuestiones relacionadas