What's the difference of strings within single or double quotes in groovy?
Asked Answered
C

3

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

Is there any difference? Or just like javascript to let's input ' and " easier in strings?

Crinose answered 20/7, 2011 at 11:57 Comment(0)
A
198

Single quotes are a standard java String

Double quotes are a templatable String, which will either return a GString if it is templated, or else a standard Java String. For example:

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

If you try templating with single quoted strings, it doesn't do anything, so:

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

Also, the link given by julx in their answer is worth reading (esp. the part about GStrings not being Strings about 2/3 of the way down.

Agglutinate answered 20/7, 2011 at 12:3 Comment(1)
Good point about the GString not being String. This becomes problematic with equals comparisons failing between GString and String even though they contain the same characters. This is something you just got to learn to look out for, particularly when referencing String/GString keys in maps.Hombre
P
23

My understanding is that double-quoted string may contain embedded references to variables and other expressions. For example: "Hello $name", "Hello ${some-expression-here}". In this case a GString will be instantiated instead of a regular String. On the other hand single-quoted strings do not support this syntax and always result in a plain String. More on the topic here:

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

Predominance answered 20/7, 2011 at 12:3 Comment(0)
D
2

I know this is a very old question, but I wanted to add a caveat.

While it is correct that single (or triple single) quotes prevent interpolation in groovy, if you pass a shell command a single quoted string, the shell will perform parameter substitution, if the variable is an environment variable. Local variables or params will yield a bad substitution.

Decided answered 27/10, 2022 at 16:18 Comment(1)
Yeah, the fact that the sh step will subsequently do parsing in the shell is what threw me.Civilized

© 2022 - 2024 — McMap. All rights reserved.