gpt4 book ai didi

java - String 类中的空构造函数

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:03 26 4
gpt4 key购买 nike

当我偶然发现一个令人困惑的构造函数时,我正在阅读 String 类。代码是这样的

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {

/** The value is used for character storage. */
private final char value[];

/** Initializes a newly created {@code String} object so that it represents
* an empty character sequence. Note that use of this constructor is
* unnecessary since Strings are immutable.
*/
public String() {
this.value = "".value;
}
// the rest of the class code
}

我不明白是什么意思

"".value;

做。这个 "" 是什么?它是一个新的 String 对象吗?如果是,使用什么构造函数?

最佳答案

What is this ""? Is it a new String object?

这是一个空字符串。它不一定是新的,而且很可能不是,因为字符串文字是 interned .

If it is, with what constructor?

在编译时,空字符串可能是由源代码创建的 Scanner来自sequence of input characters使用 String(char[], int, int) .

在运行时,ClassLoader 可能通过 java_lang_String::create_from_unicode() 从 native 代码中的类文件加载并驻留了 String和 friend 。

至于为什么使用"":是内存使用优化。由于字符串文字是 interned , "".value 是对每个空字符串的相同底层 char 数组的引用。

在存储库中,OpenJDK(78)之前使用了 this.value = new char[0];。为源代码中出现的每个 new String() 创建一个新的 char 数组对象(即希望永远不会)。

当前 OpenJDK 9 有 "".value .

此更改可防止创建新的 char 数组,从而为每个非驻留但新创建的空字符串节省几个字节。更改后,所有零长度字符串共享相同的(零长度)字符数组。

我认为这是一种罕见的情况,因为我不记得我是否曾在任何地方使用过 new String()

关于java - String 类中的空构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37225942/

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