Apa perbedaan string dalam tanda kutip tunggal atau ganda di groovy?

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

Apakah ada bedanya? Atau seperti javascript untuk memudahkan input 'dan "string?

Freewind
sumber

Jawaban:

149

Tanda kutip tunggal adalah String java standar

Tanda kutip ganda adalah String yang dapat templatenya, yang akan mengembalikan GString jika diberi templat, atau String Java standar. Sebagai contoh:

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

Jika Anda mencoba membuat template dengan string yang dikutip tunggal, itu tidak melakukan apa-apa, jadi:

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

Juga, tautan yang diberikan oleh julkiewicz dalam jawaban mereka layak untuk dibaca (khususnya bagian tentang GStrings bukan Strings sekitar 2/3 dari jalan ke bawah.

tim_yates
sumber
6
Poin bagus tentang GString bukan String. Ini menjadi masalah dengan perbandingan yang sama yang gagal antara GString dan String meskipun keduanya berisi karakter yang sama. Ini adalah sesuatu yang baru saja Anda pelajari untuk diperhatikan, terutama saat mereferensikan kunci String / GString di peta.
Steven
19

Pemahaman saya adalah bahwa string yang dikutip ganda mungkin berisi referensi yang disematkan ke variabel dan ekspresi lainnya. Misalnya: "Hello $name", "Hello ${some-expression-here}". Dalam hal ini a GStringakan dipakai sebagai pengganti reguler String. Di sisi lain, string yang dikutip tunggal tidak mendukung sintaks ini dan selalu menghasilkan teks biasa String. Lebih lanjut tentang topik di sini:

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

julx
sumber