创建字符串文字并期望一个新实例

时间:2012-08-17 13:12:26

标签: groovy

也许我只是疯了,或者我忘记了事情的运作方式。但我正在追逐一个bug(同时学习一些Groovy)并发现以下断言失败了。我想我认为在使用字符串文字时,会为它创建一个新的String实例。我错了吗?

String one = 'one'
String two = 'one'

// I thought this should fail, but it doesn't
assert one.is(two) == false

one = new String("one")
two = new String("one")

// This works as expected
assert one.is(two) == false

通过使用dump()方法,我可以看到它们确实是String的同一个实例。任何帮助或指导将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

当您使用字符串文字时,Java允许它们被实习,因此您获得相同的实例..

section 2.3 in the VM spec提到了这一点。

  

字符串文字,更一般地说,作为常量表达式值的字符串是“interned”,以便使用String.intern方法共享唯一的实例。

Groovy也遵循这条规则