def a = "a string" def b = 'another'
有什么区别吗?或者就像javascript一样让我们在字符串中输入'和"更容易?
'
"
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的方式下降。
b09cbbtk2#
我的理解是,双引号字符串可能包含对变量和其他表达式的嵌入式引用。例如:"Hello $name","Hello ${some-expression-here}"。在这种情况下,将示例化GString,而不是常规的String。另一方面,单引号字符串不支持此语法,始终会生成纯String。有关该主题的详细信息,请访问:http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings
"Hello $name"
"Hello ${some-expression-here}"
GString
String
w6lpcovy3#
我知道这是一个很老的问题,但我想补充一点。在groovy中,单引号(或三个单引号)可以防止插入,这是正确的,但是如果向shell命令传递一个单引号字符串,shell将执行参数替换(如果变量是环境变量)。局部变量或参数将产生错误的替换。
3条答案
按热度按时间sxissh061#
单引号是标准的java字符串
双引号是一个可模板化的字符串,如果它是模板化的,它将返回一个GString,否则将返回一个标准的Java String。例如:
如果您尝试使用单引号字符串进行模板化,它不会执行任何操作,因此:
此外,julx在他们的答案中给出的链接值得一阅读(特别是关于GStrings不是字符串的部分,大约2/3的方式下降。
b09cbbtk2#
我的理解是,双引号字符串可能包含对变量和其他表达式的嵌入式引用。例如:
"Hello $name"
,"Hello ${some-expression-here}"
。在这种情况下,将示例化GString
,而不是常规的String
。另一方面,单引号字符串不支持此语法,始终会生成纯String
。有关该主题的详细信息,请访问:http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings
w6lpcovy3#
我知道这是一个很老的问题,但我想补充一点。
在groovy中,单引号(或三个单引号)可以防止插入,这是正确的,但是如果向shell命令传递一个单引号字符串,shell将执行参数替换(如果变量是环境变量)。局部变量或参数将产生错误的替换。