2012-09-06 21 views
51

Khi tôi biên dịch và chạy mã này:Java - null instanceof Object đánh giá cho cả đúng và sai

public class Testing { 
    public static void main(String... args) { 
     Object obj = null; 
     if (obj instanceof Object) { 
      System.out.println("returned true"); 
     } else { 
      System.out.println("returned false"); 
     } 
     System.out.println(" " + obj instanceof Object); 
    } 
} 

tôi có được điều này trên dòng lệnh:

C:\Users\xxxxxx\Desktop>java Testing 
returned false 
true 

nên không "null instanceof someType "luôn trả về false?

+2

Một câu đố tương tự; Khi nào là 'x + 0! = X'? BTW bạn mong đợi '+' có ưu tiên cao hơn. –

+30

BTW: Bạn có thể đã trở nên nghi ngờ khi java in đúng và không đúng – Jonathan

+4

Tôi nghĩ rằng tiêu đề là một chút sai lầm, trừ khi đây là Java Quantum Edition và 'instanceof' trả về một quboolean. –

Trả lời

102

này:

" " + obj instanceof Object 

được đánh giá là:

(" " + obj) instanceof Object 

" " + obj thực sự là một chuỗi không rỗng mà là một thể hiện của Object.

+23

Đây là một bài học hay về" nhiều parens hơn tốt hơn ít hơn khi ưu tiên vận hành không rõ ràng. " '" "+ (obj instanceof Object)' sẽ in ra giá trị bạn mong đợi. – yshavit

+2

Điểm tốt. Đây là loại hành vi phản trực giác mà bạn có thể học trong _Java Puzzlers_ từ Joshua Block và Neal Gafter. –

+0

@yshavit ... hoặc sử dụng 'String.valueOf (Object)' và không '' "+ ...' khi bạn muốn biểu diễn Chuỗi. –

2

Trong ngoái System.out.println, các " " + obj đánh giá đầu tiên và kết quả, mà là một String được kiểm tra cho instanceof Object và kết quả được in ra.

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