groovy中单引号或双引号中字符串的区别是什么?

时间:2011-07-20 11:57:35

标签: string groovy

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

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

2 个答案:

答案 0 :(得分:117)

单引号是标准的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

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

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

另外,link given by julkiewicz in their answer值得一读(特别是关于GStrings不是大约2/3的部分。

答案 1 :(得分:15)

我的理解是双引号字符串可能包含对变量和其他表达式的嵌入式引用。例如:"Hello $name""Hello ${some-expression-here}"。在这种情况下,GString将被实例化而不是常规String。另一方面,单引号字符串不支持此语法,并始终生成普通String。有关此主题的更多信息:

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