web-dev-qa-db-ja.com

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

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

違いはありますか?または、javascriptのように、文字列で'"を簡単に入力できますか?

77
Freewind

単一引用符は標準のJava 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

単一引用符で囲まれた文字列を使用してテンプレート化しようとしても、何も実行されません。

println 'hi $a'            // prints "hi $a"

また、 答えにjulkiewiczによって与えられたリンク は読む価値があります(特に、GStringsが文字列ではない部分は2/3ほど下にあります)。

122
tim_yates

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

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

15
julkiewicz