2017-01-23 63 views
0

我發現了Groovy 2.4.7,1.6.0 JVM在嘗試評估而不是 instanceof條件時沒有預料到的行爲。Groovy「not instanceof」特性

在總結

class Foo {  
    static Boolean bar() { 
     String x = "Personally, I don't really like King Crimson" 
     return (!x instanceof Integer) 
    }  
} 

我預計Foo.bar()將因爲x是整數的一個實例,但是Foo.bar()返回false返回true。相比之下以下返回true:

class Foo {  
    static Boolean bar() { 
     String x = "Personally, I don't really like King Crimson" 
     return !(x instanceof Integer) 
    }  
} 

問題是學術的,但出於好奇:這是一個錯誤的語言或有我誤解了應該如何instanceof來工作?作爲字符串包含一些文本

(!x) instanceof Integer 

所以它是將字符串轉換爲布爾(!'Hello'false

回答

1

它的operator precedence的情況下...

!instanceof之前發生,所以它的實際檢查

然後看看布爾值是整數的一個實例(它不是)

因此false

如果你把括號外的!(在你的第二個版本),那麼它首先做instanceof的,並否定了結果,給你答案,你會期望

+0

感謝,向好知道。 –