What's the difference of strings within single or double quotes in groovy?

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

Is there any difference? Or just like javascript to let's input ' and " easier in strings?

58612 次浏览

单引号是标准的 java 字符串

双引号是一个可模板化的 String,如果它是模板化的,它将返回一个 GString,或者返回一个标准的 JavaString。例如:

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"

同样,Julx 在他们的回答中给出的链接也是值得一读的(特别是关于 GString 不是字符串的部分,大约是字符串的2/3。

我的理解是,双引号字符串可能包含对变量和其他表达式的嵌入引用。例如: "Hello $name""Hello ${some-expression-here}"。在这种情况下,将实例化一个 GString,而不是一个常规的 String。另一方面,单引号字符串不支持这种语法,并且总是导致一个简单的 String。更多关于这个话题的资料:

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

我知道这是一个非常古老的问题,但我想补充一个警告。

虽然在 groovy 中单引号(或三个单引号)阻止插值是正确的,但是如果你传递一个 shell 命令一个单引号字符串,如果变量是一个环境变量,那么 shell 将执行参数替换。局部变量或参数将产生错误的替换。