2013-04-12 2 views
3

Как работает нуль в этом коде, почему он не печатает объект?Как работает нуль в этом коде?

class Test1{ 
    public void doStuff(Object o){ 
    System.out.println("In Object"); 
} 

    public void doStuff(String o){ 
     System.out.println("In String"); 
    } 
} 

public class TTest { 
    public static void main(String args[]){  
     Test1 t = new Test1(); 
     t.doStuff(null); 
    } 
} 

Выход:

В Строка

+0

ну, вы не печатаете объект, который вы отправляете в методу. Вы печатаете одну и ту же строку каждый раз, когда вызывается toStuff. Если вы измените код в doStuff на System.out.println (o); вы напечатаете строковый объект, который будет null и выкинет nullpointerexception. –

+0

Когда doStuff вызывается, потому что doStuff перегружен, JVM ищет метод, принимающий более конкретные параметры. В этом случае это doStuff (String o), но вы не печатаете его. – IndoKnight

ответ

6

Java всегда будет пытаться использовать наиболее конкретную версию метода.

Поскольку вызов

t.doStuff(null); 

применима к обоим методам

t.doStuff(Object o) 
t.doStuff(String o) 

Java будет выбрать наиболее конкретное описание метода, который является

t.doStuff(String o) 
1

В String является подклассом Object, Java попытается использовать класс, наиболее расположенный в иерархия, которая применима. null может быть интерпретирован как здесь, поэтому используется метод String.