Sự khác biệt của các chuỗi trong dấu ngoặc đơn hoặc dấu ngoặc kép trong groovy là gì?


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

Có sự khác biệt nào không? Hay chỉ như javascript để nhập liệu '"dễ dàng hơn trong chuỗi?

Câu trả lời:


144

Dấu ngoặc kép là một chuỗi java tiêu chuẩn

Dấu ngoặc kép là một Chuỗi tạo mẫu, sẽ trả về một GString nếu nó được tạo mẫu hoặc nếu không thì là một Chuỗi Java tiêu chuẩn. Ví dụ:

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

Nếu bạn thử tạo khuôn mẫu với các chuỗi được trích dẫn đơn lẻ, nó không làm được gì, vì vậy:

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

Ngoài ra, liên kết do julkiewicz đưa ra trong câu trả lời của họ rất đáng đọc (đặc biệt là phần GStrings không phải là Strings khoảng 2/3 chặng đường.


5
Điểm tốt về việc GString không phải là Chuỗi. Điều này trở nên khó khăn khi so sánh bằng không thành công giữa GString và String mặc dù chúng chứa các ký tự giống nhau. Đây là điều bạn phải tìm hiểu để tìm ra, đặc biệt là khi tham chiếu đến các khóa Chuỗi / GString trong bản đồ.
Steven

19

Sự hiểu biết của tôi là chuỗi được trích dẫn kép có thể chứa các tham chiếu nhúng đến các biến và các biểu thức khác. Ví dụ: "Hello $name", "Hello ${some-expression-here}". Trong trường hợp này, a GStringsẽ được khởi tạo thay vì thường String. Mặt khác, các chuỗi được trích dẫn đơn không hỗ trợ cú pháp này và luôn dẫn đến kết quả đơn giản String. Thêm về chủ đề ở đây:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.