首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy "not“特性

Groovy "not“特性
EN

Stack Overflow用户
提问于 2017-01-23 15:42:15
回答 1查看 2.5K关注 0票数 5

我发现了我在Groovy 2.4.7,1.6.0JVM中没有预料到的行为,当我试图评估一个非实例的情况时。

总结如下:

代码语言:javascript
复制
class Foo {    
    static Boolean bar() {
      String x = "Personally, I don't really like King Crimson"
      return (!x instanceof Integer)
    }    
}

我预计Foo.bar()将返回true,因为x不是Integer的实例,但是Foo.bar()返回false。相反,以下内容返回true:

代码语言:javascript
复制
class Foo {    
    static Boolean bar() {
      String x = "Personally, I don't really like King Crimson"
      return !(x instanceof Integer)
    }    
}

这个问题是学术性的,但出于好奇:这是语言上的一个缺陷,还是我误解了实例应该如何工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-23 16:45:46

这是运算符优先的案子..。

!发生在instanceof之前,因此它实际上是在检查:

代码语言:javascript
复制
(!x) instanceof Integer

因此,它将字符串转换为布尔值(!'Hello'false,因为字符串包含一些文本。

然后查看布尔值是否是Integer的实例(但它不是)

因此false

如果将!放在括号外(就像在第二个版本中那样),那么它会执行第一个实例,并否定结果,给出您期望的答案。

编辑Groovy 3+

在groovy 3中,有一种使用!instanceof的新方法

代码语言:javascript
复制
return x !instanceof Integer
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41810151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档