2

也许我只是疯了,或者我忘记了事情应该如何运作。但是我正在追查一个错误(在学习一些 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 实例。任何帮助或指导将不胜感激。

谢谢!

4

1 回答 1

3

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

VM 规范中的第 2.3 节提到了这一点。

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

Groovy 也遵循这个规则

于 2012-08-17T13:18:14.020 回答