gpt4 book ai didi

java - 与 intern 的字符串比较

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

我试图理解 String#intern 方法。现在它引起了更多的困惑。

package com;

public class Main {
public static void main(String[] args) {

String s1 = new String("GFG"); // Line-1
String s2 = s1.concat("GFG"); // Line-2
s2.intern(); // Line-3
String s4 = "GFGGFG"; // Line-4
// s2.intern(); // Line -5
System.out.println(s2 == s4);
}
}

上面的代码打印为真。如果我注释第 3 行并取消注释第 5 行,则打印为 false。
对于第 3 行,检查 SCP 并将字符串添加到 SCP。但是在那种情况下 s2 怎么等于 s4 呢?
s2 仍然引用堆中指向 SCP 常量的对象。对吧?

谁能解释一下发生了什么?我经历了不同的 SO 问题,但仍然无法理解。

编辑
我只是想了解实习生方法。我知道黑白 ==equals 的区别,后者是首选。

最佳答案

String.intern() 返回字符串对象的规范表示。一个字符串池,最初是空的,由 String 类私下维护。

当调用 intern 方法时,如果池中已经包含等于此 String 对象的字符串(由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中并返回对此 String 对象的引用。

因此对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为真时,s.intern() == t.intern() 为真。

关于java - 与 intern 的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54939636/

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