Was ist der Unterschied zwischen Strings in einfachen oder doppelten Anführungszeichen in Groovy?

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

Gibt es einen Unterschied? Oder einfach wie Javascript, um Eingaben zu machen 'und das Stringen zu "vereinfachen?

Freilauf
quelle

Antworten:

144

Einfache Anführungszeichen sind ein Standard-Java-String

Doppelte Anführungszeichen sind ein vorlagenfähiger String, der entweder einen GString zurückgibt, wenn er als Vorlage verwendet wird, oder ein Standard-Java-String. Beispielsweise:

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

Wenn Sie versuchen, Vorlagen mit einfachen Anführungszeichen zu erstellen, geschieht nichts, also:

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

Auch der Link, den Julkiewicz in seiner Antwort gegeben hat, ist lesenswert (insbesondere der Teil, in dem GStrings keine Strings sind, etwa 2/3 des Weges nach unten.

tim_yates
quelle
5
Guter Punkt, dass der GString kein String ist. Dies wird problematisch, wenn Vergleiche zwischen GString und String fehlschlagen, obwohl sie dieselben Zeichen enthalten. Dies ist etwas, worauf Sie gerade achten müssen, insbesondere wenn Sie auf String- / GString-Schlüssel in Karten verweisen.
Steven
19

Nach meinem Verständnis kann eine Zeichenfolge in doppelten Anführungszeichen eingebettete Verweise auf Variablen und andere Ausdrücke enthalten. Zum Beispiel: "Hello $name", "Hello ${some-expression-here}". In diesem Fall GStringwird a anstelle eines regulären instanziiert String. Zeichenfolgen in einfachen Anführungszeichen unterstützen diese Syntax hingegen nicht und führen immer zu einer Ebene String. Mehr zum Thema hier:

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

Julx
quelle