Answers:
单引号是标准的Java字符串
双引号是一个可模板化的字符串,如果是模板化的,它将返回一个GString,或者返回一个标准的Java字符串。例如:
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
如果您尝试使用单引号引起来的字符串进行模板化,那么它什么也不会做,所以:
println 'hi $a' // prints "hi $a"
另外,julkiewicz在其答案中给出的链接也值得一读(特别是有关GString的部分不是字符串的2/3左右)。
我的理解是,双引号字符串可能包含对变量和其他表达式的嵌入式引用。例如:"Hello $name"
,"Hello ${some-expression-here}"
。在这种情况下,GString
将实例化a而不是常规String
。另一方面,单引号字符串不支持此语法,并且始终导致无格式String
。有关此主题的更多信息:
http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings