gpt4 book ai didi

Java 7 - String.intern() 行为

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:39 24 4
gpt4 key购买 nike

我读过 this answer关于如何检查字符串是否在 Java 中被驻留,但我不明白以下结果:

String x = args[0]; // args[0] = "abc";
String a = "a";
String y = a + "bc";
System.out.println(y.intern() == y); // true

但是如果我声明一个字符串文字:

String x = "abc";
String a = "a";
String y = a + "bc";
System.out.println(y.intern() == y); // false

此外,没有任何字符串字面量,args[0] 似乎直接被 interned:

// String x = "abc";
String y = args[0];
System.out.println(y.intern() == y); // true (???)
// false if the first line is uncommented

为什么 y.intern() == y 根据 x 是否为文字而改变,即使对于使用命令行参数的示例也是如此?

我知道literal strings are interned at compile time ,但我不明白为什么它会影响前面的示例。我还阅读了几个关于字符串实习的问题,比如 String Pool behavior , Questions about Java's String pool Java String pool - When does the pool change? 。然而,他们都没有对这种行为给出可能的解释。

编辑:

我错误地写道,在第三个示例中,如果声明了 String x = "abc";,结果不会改变,但它会改变。

最佳答案

这是因为 y.intern() 返回 y 如果字符串之前没有实习过。如果字符串已经存在,调用将返回已经存在的实例,该实例很可能与 y 不同。

但是,所有这些都高度依赖于实现,因此在不同版本的 JVM 和编译器上可能会有所不同。

关于Java 7 - String.intern() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com