Groovyで一重引用符または二重引用符内の文字列の違いは何ですか?


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

違いはありますか?または、文字列を入力'して"簡単にするJavaScriptのように?

回答:


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の間で等号比較が失敗すると問題になります。これは、特にマップで文字列/ GStringキーを参照するときに、気をつけなければならないことです。
スティーブン

19

私の理解では、二重引用符で囲まれた文字列には、変数やその他の式への参照が埋め込まれている可能性があります。例:"Hello $name""Hello ${some-expression-here}"。この場合GString、通常ではなくがインスタンス化されますString。一方、単一引用符で囲まれた文字列はこの構文をサポートせず、常にプレーンになりStringます。ここのトピックの詳細:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.