我不明白为什么我的简单String
相等测试返回 false。
代码是:
boolean isDevelopment() {
//config.project_stage is set to "Development"
String cfgvar = "${config.project_stage}"
String comp = "Development"
assert cfgvar.equals(comp)
}
Run Code Online (Sandbox Code Playgroud)
结果是:
assert cfgvar.equals(comp)
| | |
| false Development
Development
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我也会出错:
assert cfgvar == comp
Run Code Online (Sandbox Code Playgroud)
toString()
没有必要。很可能您config.project_stage
在cfgvar
. 中有一些尾随空格,因此它们也保留在.
comp
没有多余的空格,可以从您的代码中看到什么。
最初表达式"${config.project_stage}"
是GString
类型的,但由于您将它分配给一个类型为 as 的变量String
,它被强制转换为String
,因此toString()
不会改变任何内容。
使用equals(...)
或取决于您==
。实际上,Groovy 默默地将第二种形式转换为第一种形式。
所以,总而言之,你可以写assert cfgvar.trim() == comp
.
你也可以cfgvar
在一开始就修剪,写:
cfgvar = "${config.project_stage}".trim()
Run Code Online (Sandbox Code Playgroud)
然后不用担心任何尾随空格。