2017-05-31 51 views
0

是什么差的常规变量

String test = "blah" 
print("this is a test ${test} blah blah") 

print("This is a test " + test + " blah blah") 
+0

[它被称为字符串插值](https://en.wikipedia.org/wiki/String_interpolation)。它更简单易读。 – m0skit0

+0

后者产生'java.lang.String',而前者产生'org.codehaus.groovy.runtime.GStringImpl'。尽管它大多只是语法糖。 – jsheeran

回答

2

当文字字符串包含${}之间的差异的,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

+0

啊,谢谢。您链接的SO问题是我遇到的问题 –

0

其实每一个使用“”字符串是的GString。当你使用''这意味着你使用java.lang.String。 不幸的是,Java中的String是final类。所以,groovy的开发人员可以解决这个问题。

+1

[当然是这样?](https://groovyconsole.appspot.com/script/5099807190286336)。我注意到''$ x“.getClass()'返回'org.codehaus.groovy.runtime.GStringImpl',但''abc”.getClass()'返回'java.lang.String'。 –

+0

不同版本之间可能? – slim

+0

@HuguesMoreau Groovy做了很多魔术。所以它可以将GString转换为String。 –