2010-10-13 39 views
9

Tại sao đầu ra này: "bên trong phương thức đối số String"? Không phải là loại "Đối tượng" rỗng?Không null có loại đối tượng?

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

Thật điên rồ. Tôi vừa thử thêm quá trình 'printVal' thứ ba,' printVal (Integer obj) 'để xem điều gì sẽ xảy ra. Bây giờ 'a.printVal (null)' là một lỗi trình biên dịch, do sự mơ hồ. Câu hỏi hay. – mgiuca

Trả lời

3

Có, nhưng vô cũng là loại Chuỗi và tất cả các loại khác, vì vậy nó chọn phương pháp cụ thể nhất để gọi.

1

Cụ thể hơn, một nullchữ sẽ gọi phiên bản Chuỗi, vì những lý do được nêu ra bởi các câu trả lời khác.

Mặt khác:

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

sẽ in "bên trong phương pháp luận đối tượng." Như sẽ cài đặt loại cho myObj cho bất kỳ loại nào khác ngoài String.

Các vấn đề liên quan