在groovy中单引号和双引号中的字符串有什么区别?

eit6fx6z  于 2022-11-01  发布在  其他
关注(0)|答案(3)|浏览(308)
def a = "a string"
def b = 'another'

有什么区别吗?或者就像javascript一样让我们在字符串中输入'"更容易?

sxissh06

sxissh061#

单引号是标准的java字符串
双引号是一个可模板化的字符串,如果它是模板化的,它将返回一个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

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

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

此外,julx在他们的答案中给出的链接值得一阅读(特别是关于GStrings不是字符串的部分,大约2/3的方式下降。

b09cbbtk

b09cbbtk2#

我的理解是,双引号字符串可能包含对变量和其他表达式的嵌入式引用。例如:"Hello $name""Hello ${some-expression-here}"。在这种情况下,将示例化GString,而不是常规的String。另一方面,单引号字符串不支持此语法,始终会生成纯String。有关该主题的详细信息,请访问:
http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings

w6lpcovy

w6lpcovy3#

我知道这是一个很老的问题,但我想补充一点。
在groovy中,单引号(或三个单引号)可以防止插入,这是正确的,但是如果向shell命令传递一个单引号字符串,shell将执行参数替换(如果变量是环境变量)。局部变量或参数将产生错误的替换。

相关问题