3

以下所有断言都是true.

def obj = ["XXX"]
assert  true && obj // OK
assert  obj // OK
assert  ![] // OK

为什么强制在以下一项中不起作用?

assert  true == obj // List is NOT coerced to true
4

3 回答 3

10

因为 == 运算符不需要布尔操作数。

在第二种情况下应用强制,因为 && 运算符需要布尔操作数,而在第三种情况下,因为 assert 需要布尔操作数。但是 == 运算符接受任何类型的操作数,如果类型或值不同,则返回 false。

于 2012-12-21T02:28:40.283 回答
1

在布尔上下文中评估时,空集合是错误的(AKA 错误),所以

assert ![]

评估为true并且断言通过。

于 2012-12-21T14:06:59.473 回答
0

'==' 运算符被转换为一个equals(Object o)方法调用,因此它适用于任何类型的对象,而不仅仅是布尔值,因此没有理由强制转换为布尔值。

于 2015-01-06T08:34:18.840 回答