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?

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.