В чем разница между строками в одинарных или двойных кавычках в Groovy?


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

Есть ли разница? Или просто как javascript, чтобы вводить 'и "проще в строках?

Ответы:


149

Одиночные кавычки - это стандартная строка Java

Двойные кавычки представляют собой шаблонную строку, которая либо вернет GString, если она является шаблоном, либо стандартную строку Java. Например:

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

Если вы попытаетесь создать шаблон с одинарными кавычками, он ничего не сделает, поэтому:

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

Кроме того, стоит прочитать ссылку, предоставленную julkiewicz в их ответе (особенно часть о том, что GStrings не являются строками примерно на 2/3 пути вниз.


6
Хороший момент в том, что GString не является String. Это становится проблематичным из-за того, что сравнение GString и String не выполняется, даже если они содержат одинаковые символы. Это то, на что вам просто нужно научиться обращать внимание, особенно при ссылках на ключи String / GString на картах.
Стивен

19

Насколько я понимаю, строка в двойных кавычках может содержать встроенные ссылки на переменные и другие выражения. Например: "Hello $name", "Hello ${some-expression-here}". В этом случае GStringбудет создан экземпляр вместо обычного String. С другой стороны, строки в одинарных кавычках не поддерживают этот синтаксис и всегда дают простой результат String. Подробнее по теме здесь:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.