gpt4 book ai didi

java - 关于Java堆空间字符串对象存储的查询

转载 作者:行者123 更新时间:2023-11-29 04:44:52 27 4
gpt4 key购买 nike

我知道

String s1 = "test";
String s2 = new String("test");
System.out.println(s1==s2); // false

在上面的代码片段“test”中,字符串对象是在 java 的字符串池中创建的(s1 将被传递给它的引用)并在内存的堆空间中创建一个新的String对象(s2将在堆空间中)。

所以 s2 字符串对象会在内部引用字符串池的“测试”字符串对象,还是 s2 在内存中保留一个完全不同的“测试”字符串对象

如果我们以某种方式“测试”字符串常量池中的字符串对象被移除,会有什么影响? s2 是否仍具有值“test”?

我知道这个话题已经被触及了很多,但我检查过的之前的答案都没有澄清它。

如果有更好的解释,请提及任何来源。

提前致谢!

最佳答案

the Java 8 source code , String(String) 构造函数重用参数中的 value 字段。

请注意,value 是一个 char[],因此两个字符串实例使用相同的底层数组,但 s2 不是在内部使用 "test" 本身,因为它是 String,而不是 char[]

关于java - 关于Java堆空间字符串对象存储的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37608634/

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