2011-07-20 135 views

回答

75

單引號是一個標準的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" 

此外,link given by julkiewicz in their answer是值得一讀(尤指關於GString的部分不是。 。幸福字符串有關的一路下跌2/3

+3

關於GString的不是串好一點。即使它們包含相同的字符,但在GString和String之間的等於比較失敗時,這會變得有問題。這是你需要學習的東西,尤其是在引用地圖中的String/GString鍵時。 – Steven

+0

完美的解釋,非常感謝。 –

11

我的理解是,雙引號字符串可能包含嵌入引用變量和其他表現形式,例如:。"Hello $name""Hello ${some-expression-here}"在這種情況下GString將被實例化,而不是常規String。另一方面,單引號的字符串不支持這種語法,並且總是導致一個普通的String。更多關於該主題在這裏:

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

相關問題