Groovy中+运算符与is运算符的执行结果差异原因咨询
Groovy 两段断言执行结果差异的根本原因
核心差异来源于 Groovy 的运算符优先级规则和断言真值判定规则:
- Groovy 运算符优先级从高到低排序为:点方法调用(如
.is())> 算术加法运算符(+)> 相等比较运算符(==) - Groovy 断言规则:表达式结果为真值时断言通过,非空字符串属于真值,布尔值
false、空字符串、null、0值属于假值。
第一段代码执行逻辑
代码:
assert 'foo'+' bar'.is('foo baz')
执行顺序:
- 优先执行优先级最高的
.is()方法调用:' bar'.is('foo baz'),is()方法用于判断两个对象是否为同一个内存实例,此处两个字符串内容、内存地址均不相等,返回布尔值false - 执行加法运算:Groovy 中字符串与布尔值相加时,布尔值会自动转为对应字符串,计算结果为
'foo' + 'false' = 'foofalse' - 执行断言:
'foofalse'是非空字符串,属于真值,因此断言通过。
第二段代码执行逻辑
代码:
assert 'foo'+' bar' == 'foo baz'
执行顺序:
- 优先执行加法运算,得到结果
'foo bar' - 再执行相等比较:
'foo bar'与'foo baz'内容明显不同,返回布尔值false - 执行断言:收到
false结果,断言失败,符合预期。
内容的提问来源于stack exchange,提问作者ericj
相关产品推荐
相关产品推荐

