¿Cuál es la diferencia de cadenas entre comillas simples o dobles en groovy?

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

¿Hay alguna diferencia? ¿O simplemente como javascript para ingresar 'y "más fácilmente en cadenas?

Freewind
fuente

Respuestas:

144

Las comillas simples son una cadena java estándar

Las comillas dobles son una cadena que puede adaptarse a la plantilla, que devolverá una GString si tiene una plantilla o una cadena Java estándar. Por ejemplo:

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 intenta crear plantillas con cadenas entre comillas simples, no hace nada, así que:

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

Además, vale la pena leer el enlace proporcionado por julkiewicz en su respuesta (especialmente la parte sobre GStrings que no son cadenas de aproximadamente 2/3 del camino hacia abajo.

tim_yates
fuente
5
Buen punto acerca de que GString no es String. Esto se vuelve problemático con las comparaciones iguales que fallan entre GString y String a pesar de que contienen los mismos caracteres. Esto es algo que debe aprender a tener en cuenta, especialmente cuando se hace referencia a claves String / GString en mapas.
Steven
19

Tengo entendido que la cadena entre comillas dobles puede contener referencias incrustadas a variables y otras expresiones. Por ejemplo: "Hello $name", "Hello ${some-expression-here}". En este caso GString, se creará una instancia de un archivo String. Por otro lado, las cadenas entre comillas simples no admiten esta sintaxis y siempre dan como resultado un archivo String. Más sobre el tema aquí:

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

julx
fuente