2017-01-23 4 views
0

이 아닌 instanceof 조건을 평가하려고 할 때 Groovy 2.4.7, 1.6.0 JVM에서 예상하지 못한 동작을 발견했습니다. 요약Groovy "not instanceof"특색

: 나는 x는 하지 정수의 인스턴스 그러나 Foo.bar()는 false를 반환하기 때문에 Foo.bar()가 true를 반환 것으로 예상 것

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

. 사실 다음 반환 반대로 :

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입니다 : 실제로 확인 그래서

그것은 operator precedence의 사건

답변

1

...

!instanceof 전에 발생

그런 다음 부울이 정수가 아닌 인스턴스인지 확인합니다 (그렇지 않은 경우)

당신이 (당신의 두 번째 버전에서와 같이) 괄호 외부 !을 넣어 다음 당신에게 답을주고, 먼저 instanceof를을 수행하고, 그 결과를 부정하면

따라서 false

당신은 좋은,

+0

덕분에 기대 알고있다. –