Groovy中的字符串常量是否与Java中的字符串常量相同?

Groovy中的字符串常量是否与Java中的字符串常量相同?,groovy,Groovy,我正在创建列表和地图的大型数据结构,其中字符串作为这些地图中的键。同样的钥匙被反复使用了数千次。如果这些字符串不被插入,我的代码只需重复相同的文本,就会消耗大量内存 为了创建这些结构,我使用了map-literal语法,我对其中的常量特别感兴趣 [ name: "text", children: something.collect { [name: it.name, city: it.city] } ] 是的,关于您的问题字符串,它们在groovy中的行为与在java中的行为相同。您可

我正在创建列表和地图的大型数据结构,其中字符串作为这些地图中的键。同样的钥匙被反复使用了数千次。如果这些字符串不被插入,我的代码只需重复相同的文本,就会消耗大量内存

为了创建这些结构,我使用了map-literal语法,我对其中的常量特别感兴趣

[
  name: "text",
  children: something.collect { [name: it.name, city: it.city] }
]

是的,关于您的问题字符串,它们在groovy中的行为与在java中的行为相同。您可以通过打开groovyConsole轻松测试这一点:

def a = "test"
def b = "test"

assert a.is(b) // asserts true

由于==用于测试对象相等性,因此必须使用is()来测试变量是否引用同一对象。

是的,关于问题字符串在groovy中的行为,与java中的行为相同。您可以通过打开groovyConsole轻松测试这一点:

def a = "test"
def b = "test"

assert a.is(b) // asserts true

由于==用于测试对象相等性,因此必须使用is()来测试变量是否引用同一对象。

并回答问题的另一半;是的,使用语法[key:value]时映射键被视为字符串常量。因此,
assert[name:'a'].keySet().first().is('name')
也验证为true。如果您在运行时解析密钥(例如,通过读取文件),则实例将不相同;是的,使用语法[key:value]时映射键被视为字符串常量。因此,
assert[name:'a'].keySet().first().is('name')
也验证为true。如果在运行时解析密钥(例如,通过读取文件),则实例将不同。