Java equals()方法中使用的字符串类值变量:如何以及何时定义?
我研究了String类中的equals()方法,发现它使用value——一个字符数组。此变量为: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[]; ... } 如
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是关于第一部分:但是我没有找到定义这个值的地方。