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


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

有什么区别吗?或者只是像JavaScript让输入'"字符串中更容易?

Answers:


144

单引号是标准的Java字符串

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

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"

另外,julkiewicz在其答案中给出链接也值得一读(特别是有关GString的部分不是字符串的2/3左右)。


5
关于GString不是String的好处。即使在GString和String包含相同字符的情况下,相等比较失败,这也会成为问题。这是您必须要学习的东西,特别是在引用映射中的String / GString键时。
史蒂文

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.