2010-10-13 2 views
9

Pourquoi cette sortie: "inside String argument method"? N'est-ce pas un type "Object" nul?Est-ce que null a un type d'objet?

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 fou. J'ai juste essayé d'ajouter une troisième surcharge 'printVal',' printVal (Integer obj) 'pour voir ce qui arriverait. Maintenant 'a.printVal (null)' est une erreur de compilation, due à l'ambiguïté. Bonne question. – mgiuca

Répondre

3

Oui, mais nul est également type String et tous les autres types, il choisit la méthode la plus spécifique à appeler.

1

Plus précisément, un nulllittéral appellera la version String, pour les raisons soulignées par les autres réponses.

D'autre part:

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); 
    } 
} 

imprimera "à l'intérieur méthode argument Object." Tout comme les paramètres le type pour myObj à tout autre type que String.

Questions connexes