差的常规变量
是什么差的常规变量
String test = "blah"
print("this is a test ${test} blah blah")
和
print("This is a test " + test + " blah blah")
当文字字符串包含${}
之间的差异的,Groovy构建一个的GString。
每其的Javadoc,一个GString的:
代表含有嵌入的值,诸如
"hello there ${user} how are you?"
可以懒惰地评估一个字符串。高级用户可以迭代文本和值以执行特殊处理,例如执行SQL操作,则值可以替换为?
,并且实际值对象可以绑定到JDBC语句。
因此"this is a test ${test} blah blah"
携带其结构,它可以编程检查。而"This is a test " + test + " blah blah"
是一个不可变的字符串,就像在Java中一样。
通常这不会对程序员有什么影响,但偶尔令人惊讶的事情发生了 - 看到:dynamically set the db in a sql query
啊,谢谢。您链接的SO问题是我遇到的问题 –
其实每一个使用“”字符串是的GString。当你使用''这意味着你使用java.lang.String。 不幸的是,Java中的String是final类。所以,groovy的开发人员可以解决这个问题。
[当然是这样?](https://groovyconsole.appspot.com/script/5099807190286336)。我注意到''$ x“.getClass()'返回'org.codehaus.groovy.runtime.GStringImpl',但''abc”.getClass()'返回'java.lang.String'。 –
不同版本之间可能? – slim
@HuguesMoreau Groovy做了很多魔术。所以它可以将GString转换为String。 –
[它被称为字符串插值](https://en.wikipedia.org/wiki/String_interpolation)。它更简单易读。 – m0skit0
后者产生'java.lang.String',而前者产生'org.codehaus.groovy.runtime.GStringImpl'。尽管它大多只是语法糖。 – jsheeran