Qual è la differenza delle stringhe all'interno di virgolette singole o doppie in groovy?


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

C'è qualche differenza? O semplicemente come JavaScript per inserire 'e "semplificare le stringhe?

Risposte:


144

Le virgolette singole sono una stringa java standard

Le virgolette doppie sono una stringa modellabile, che restituirà una GString se è basata su modelli, oppure una stringa Java standard. Per esempio:

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

Se provi a creare modelli con stringhe tra virgolette singole, non fa nulla, quindi:

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

Inoltre, vale la pena leggere il collegamento fornito da julkiewicz nella loro risposta (specialmente la parte su GStrings che non sono stringhe a circa 2/3 della fine.


5
Buon punto sul fatto che GString non sia String. Ciò diventa problematico con confronti uguali che non riescono tra GString e String anche se contengono gli stessi caratteri. Questo è qualcosa che devi imparare a cercare, in particolare quando fai riferimento a chiavi String / GString nelle mappe.
Steven

19

La mia comprensione è che le stringhe tra virgolette possono contenere riferimenti incorporati a variabili e altre espressioni. Ad esempio: "Hello $name", "Hello ${some-expression-here}". In questo caso GStringverrà istanziato un al posto di un normale String. D'altra parte le stringhe con virgolette singole non supportano questa sintassi e risultano sempre semplici String. Maggiori informazioni sull'argomento qui:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.