Quelle est la différence des chaînes entre guillemets simples ou doubles dans groovy?


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

Y a-t-il une différence? Ou juste comme javascript pour entrer 'et "plus facilement dans les chaînes?

Réponses:


144

Les guillemets simples sont une chaîne Java standard

Les guillemets doubles sont une chaîne modélisable, qui retournera soit une GString si elle est modélisée, soit une chaîne Java standard. Par exemple:

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

Si vous essayez de créer des modèles avec des chaînes entre guillemets simples, cela ne fait rien, donc:

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

De plus, le lien donné par julkiewicz dans leur réponse vaut la peine d'être lu (en particulier la partie sur les GStrings n'étant pas des chaînes aux 2/3 environ.


5
Bon point sur le GString n'étant pas String. Cela devient problématique avec des comparaisons égales échouant entre GString et String même si elles contiennent les mêmes caractères. C'est quelque chose que vous devez simplement apprendre à surveiller, en particulier lors du référencement de clés String / GString dans des cartes.
Steven

19

Je crois comprendre que la chaîne entre guillemets peut contenir des références incorporées à des variables et à d'autres expressions. Par exemple: "Hello $name", "Hello ${some-expression-here}". Dans ce cas, un GStringsera instancié au lieu d'un régulier String. D'un autre côté, les chaînes entre guillemets simples ne prennent pas en charge cette syntaxe et donnent toujours un simple String. Plus d'informations sur le sujet ici:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.