groovy - 创建字符串文字并期待一个新实例

标签 groovy

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

谢谢!

最佳答案

当你使用字符串文字时,Java 允许它们被保留,所以你得到相同的实例..

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

String literals and, more generally, strings that are the values of constant expressions are "interned" so as to share unique instances, using the method String.intern.

Groovy 也遵循这个规则

关于groovy - 创建字符串文字并期待一个新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12006538/

相关文章:

java - Gradle找不到tools.jar

java - 如何为 gmaven 插件设置 JDK 版本?

groovy - 可以切换使用String.contains吗?

elasticsearch - Elasticsearch脚本:无法从curl命令行执行.groovy文件

json - Grails的getProperties方法并不总是以正确的顺序返回属性

Java 项目到 Groovy - 库不起作用

grails - 如果URL不包含额外路径,如何显示身份验证页面?

groovy - IntelliJ 无法识别常规字符串

servlets - 如何将 xml 编码为 Base64 并作为 servlet 响应发回?

java - 如何阻止线程继续执行死循环