Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java equals()方法中使用的字符串类值变量:如何以及何时定义?_Java_String - Fatal编程技术网

Java equals()方法中使用的字符串类值变量:如何以及何时定义?

Java equals()方法中使用的字符串类值变量:如何以及何时定义?,java,string,Java,String,我研究了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类中的equals()方法,发现它使用value——一个字符数组。此变量为:

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

    ...
}
如何以及何时定义该


编辑:我见过@Xentros提到的3个构造函数。但是,此.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 str = "My string";
没有奇迹发生
JVM
创建新的
String
调用构造函数。这在报告中有解释

编辑

在OpenJDK中可用的JVM中,以下文件包含创建字符串文本的本机代码。它是用C++完成的,所以没有调用java构造函数。

值在每个构造函数中初始化

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 str = "My string";
没有奇迹发生
JVM
创建新的
String
调用构造函数。这在报告中有解释

编辑

在OpenJDK中可用的JVM中,以下文件包含创建字符串文本的本机代码。它是用C++完成的,所以没有调用java构造函数。

在这种情况下,确切的构造函数是什么?@KirillCh它依赖于JVM。它不是规范的一部分,因此在每个JVM中可能会有所不同。我猜它是以
char[]
作为参数的,因此没有无限递归。this.value仅在最后一个构造函数中定义为char数组。然而,我并没有直接引用它。此外,如果您在此处设置断点,它将不会在此处停止。所以我的问题是开放的。这意味着你的答案不是关于这个问题的?@KirillCh它是关于第一部分:
但是我没有找到一个定义这个值的地方。
在这种情况下调用什么确切的构造函数?@KirillCh它依赖于JVM。它不是规范的一部分,因此在每个JVM中可能会有所不同。我猜它是以
char[]
作为参数的,因此没有无限递归。this.value仅在最后一个构造函数中定义为char数组。然而,我并没有直接引用它。此外,如果您在此处设置断点,它将不会在此处停止。所以我的问题是开放的。这意味着你的答案不是关于这个问题吗?@KirillCh是关于第一部分:
但是我没有找到定义这个值的地方。