Java - 计算字符串长度

Java - calculating String length

初始化数组时,Java询问该数组的长度。否则我们会得到编译时错误。

char[] b = new char[3];

这里3是那个数组b的长度。我们可以从b.length得到

当我们看到 String 的构造函数时 class

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

String 构造函数中的原始 参数来自哪里?那怎么得到它的长度?

在字符串长度方法中

    public int length() {
    return value.length;
}

我的问题#1

我们如何在不初始化数组的情况下获取长度(因为构造函数中没有数组初始化)?

我的问题#2

String s = new String("MyString");

在上面的行中,我正在为 String class 创建实例,当我检查 String class 的构造函数时,我遇到了以下代码构造函数

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

我的疑问是构造函数内部如何将 String class 本身作为参数?从哪里加载?

Java 允许为正在编写构造函数或其他方法的同一个 class 对象提供参数。

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

字符串 class 从散列中获取长度,因为散列有一个唯一的代码,可以告诉那里有多少个字符。

在本例中,以下语句从 "String literal" 构造 String 实例 s "MyString"

String s = new String("MyString");

它等同于

String s = "MyString";

根据官方docs

  1. 字符串文字是对 class 字符串(§4.3.1、§4.3.3)实例的引用。
  2. 一个字符串文字总是引用 class 字符串(实习)
  3. 的同一个实例

具体针对"MyString"的长度,编译器在解析源代码时会统计字面量中的字符数,并将该字符串中的char[]初始化为合适的长度。然后它将创建一个具有相同长度

的新String s

附带说明一下,您可以(出于类似的原因)创建一个数组而无需自己指定长度。编译器将计算元素的数量并相应地设置长度 E.g.

char[] b = {'a', 'b', 'c'};