java - 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仅在最后一个构造函数中定义为字符数组。我没有直接调用它。此外,如果您在这些构造函数中设置断点,它不会停在那里。
解决方案
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
创建 newString
调用构造函数。在语言规范中有解释
编辑:
在 OpenJDK 中可用的 JVM 中,以下文件包含创建字符串文字的本机代码。它是在 C++ 中完成的,因此不会调用 Java 构造函数。
推荐阅读
- python-3.x - python3中使用CVXPY进行整数线性规划
- html - 在嵌套的 div 和 span 标签中使用 scrapy 跟踪信息
- css - 某些样式的 ReactJS 未在浏览器中应用
- xml - 替换取自另一个属性的值
- c - 如何使用等待();在一个进程中为了等待它的子进程首先被执行
- parsing - 解析 PDF 文件并输出单个字符位置
- python - 在for循环中迭代字典太多次?
- php - PHP 2d数组总和相同的索引值
- java - Flyway:如何运行脚本而不将其添加到迁移中?
- python - 无法通过 REST API 调用执行 Ansible playbook