groovy中单引号或双引号内的字符串有啥区别?
Posted
技术标签:
【中文标题】groovy中单引号或双引号内的字符串有啥区别?【英文标题】:What's the difference of strings within single or double quotes in groovy?groovy中单引号或双引号内的字符串有什么区别? 【发布时间】:2011-10-09 08:14:08 【问题描述】:def a = "a string"
def b = 'another'
有什么不同吗?还是像 javascript 一样让我们在字符串中更轻松地输入 '
和 "
?
【问题讨论】:
【参考方案1】:单引号是标准的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"
另外,link given by julkiewicz in their answer 值得一读(尤其是关于 GStrings 不是大约 2/3 的字符串的部分。
【讨论】:
关于 GString 不是字符串的好点。这会导致 GString 和 String 之间的相等比较失败,即使它们包含相同的字符。这是你必须学会注意的事情,尤其是在地图中引用字符串/GString 键时。【参考方案2】:我的理解是双引号字符串可能包含对变量和其他表达式的嵌入式引用。例如:"Hello $name"
、"Hello $some-expression-here"
。在这种情况下,GString
将被实例化,而不是常规的 String
。另一方面,单引号字符串不支持这种语法并且总是产生一个普通的String
。更多关于这里的主题:
http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings
【讨论】:
以上是关于groovy中单引号或双引号内的字符串有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章