Qual é a diferença de strings dentro de aspas simples ou duplas no groovy?

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

Existe alguma diferença? Ou apenas como javascript para inserir 'e "mais fácil em strings?

Freewind
fonte

Respostas:

144

As aspas simples são uma string java padrão

As aspas duplas são uma String modelável, que retornará um GString se for modelada ou então uma String Java padrão. Por exemplo:

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 você tentar modelar com strings entre aspas simples, não fará nada, então:

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

Além disso, vale a pena ler o link fornecido por julkiewicz em sua resposta (especialmente a parte sobre GStrings não serem Strings cerca de 2/3 do caminho para baixo.

tim_yates
fonte
5
Bom ponto sobre o GString não ser String. Isso se torna problemático com comparações de igualdade falhando entre GString e String, embora contenham os mesmos caracteres. Isso é algo que você acabou de aprender a observar, particularmente ao fazer referência a chaves String / GString em mapas.
Steven
19

Meu entendimento é que a string entre aspas pode conter referências incorporadas a variáveis ​​e outras expressões. Por exemplo: "Hello $name", "Hello ${some-expression-here}". Nesse caso, um GStringserá instanciado em vez de um regular String. Por outro lado, strings entre aspas simples não suportam essa sintaxe e sempre resultam em um texto simples String. Mais sobre o assunto aqui:

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

julx
fonte