2012-09-06 54 views
51

當我編譯並運行此代碼:爪哇 - 空的instanceof對象的計算結果爲真假兩

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

我得到這個命令行:

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

不應該「空的instanceof someType「總是返回false?

+2

類似的難題;什麼時候是'x + 0!= x'?順便說一句,你期望'+'具有更高的優先級。 –

+30

順便說一句:你可能已經變得可疑,當java打印真實,而不是真 – Jonathan

+4

我認爲標題有點誤導,除非這是Java量子版和'instanceof'返回一個quboolean。 –

回答

102

此:

" " + obj instanceof Object 

被評價爲:

(" " + obj) instanceof Object 

" " + obj確實是一個非空字符串,它是Object一個實例。

+23

這是一個很好的教訓,「更多的parens當運營商的優先級不是非常明顯時,優於少於這一點。「 '「」+(obj instanceof Object)'會打印出你期望的值。 – yshavit

+2

好點。這是你可以從Joshua Block和Neal Gafter在_Java Puzzlers_中學習的反直覺行爲。 –

+0

@yshavit ...或當你想要字符串表示時使用'String.valueOf(Object)'而不是'「」+ ...'。 –

2

在最近的System.out.println中," " + obj首先評估,結果爲String檢查instanceof Object並打印結果。