回答:
単一引用符は標準の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ほど下の文字列になっていないことに関する部分)。
私の理解では、二重引用符で囲まれた文字列には、変数やその他の式への参照が埋め込まれている可能性があります。例:"Hello $name"
、"Hello ${some-expression-here}"
。この場合GString
、通常ではなくがインスタンス化されますString
。一方、単一引用符で囲まれた文字列はこの構文をサポートせず、常にプレーンになりString
ます。ここのトピックの詳細:
http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings