groovy中单引号或双引号内的string有什么区别?
def a = "a string" def b = 'another'
有什么区别吗? 或者就像JavaScript让我们input'
和"
在string更容易?
单引号是一个标准的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
如果您尝试使用单引号string进行模板化,则不会执行任何操作,因此:
println 'hi $a' // prints "hi $a"
另外, julkiewicz给出的答案值得一读(特别是关于GStrings不是Strings的2/3左右的部分)。
我的理解是,双引号string可能包含对variables和其他expression式的embedded式引用。 例如: "Hello $name"
, "Hello ${some-expression-here}"
。 在这种情况下,一个GString
将被实例化,而不是一个普通的String
。 另一方面,单引号的string不支持这种语法,并且总是导致一个普通的String
。 更多关于这个话题:
http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings