groovy中单引号或双引号内的string有什么区别?

def a = "a string" def b = 'another' 

有什么区别吗? 或者就像JavaScript让我们input'"在string更容易?

单引号是一个标准的Java String

双引号是一个模板化的string,如果是模板化的,它将返回一个GString,否则返回一个标准的Java String。 例如:

 println 'hi'.class.name // prints java.lang.String println "hi".class.name // prints java.lang.String def a = 'Freewind' println "hi $a" // prints "hi Freewind" println "hi $a".class.name // prints org.codehaus.groovy.runtime.GStringImpl 

如果您尝试使用单引号string进行模板化,则不会执行任何操作,因此:

 println 'hi $a' // prints "hi $a" 

另外, julkiewicz给出的答案值得一读(特别是关于GStrings不是Strings的2/3左右的部分)。

我的理解是,双引号string可能包含对variables和其他expression式的embedded式引用。 例如: "Hello $name""Hello ${some-expression-here}" 。 在这种情况下,一个GString将被实例化,而不是一个普通的String 。 另一方面,单引号的string不支持这种语法,并且总是导致一个普通的String 。 更多关于这个话题:

http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings