首页 > 解决方案 > equals() 方法中使用的字符串类值变量:它是如何以及何时定义的?

问题描述

我研究了 String 类中的equals()方法,发现它使用value - 一个字符数组。这里这个变量是:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    ...
}

创建字符串后,立即定义该并在调试模式下查看。但是我没有找到定义这个的地方。

我的问题。当我们创建这样的字符串时:

String str = "My string";

如何以及何时定义此

编辑:我见过@xenteros 提到的 3 个构造函数。但是this.value仅在最后一个构造函数中定义为字符数组。我没有直接调用它。此外,如果您在这些构造函数中设置断点,它不会停在那里。

标签: javastring

解决方案


value在每个构造函数中初始化。

public String() {
    this.value = new char[0];
}

public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}

public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

String.java 的源代码

当你执行

String str = "My string";

没有魔法发生。JVM创建 newString调用构造函数。在语言规范中有解释

编辑

在 OpenJDK 中可用的 JVM 中,以下文件包含创建字符串文字的本机代码。它是在 C++ 中完成的,因此不会调用 Java 构造函数。

关联


推荐阅读