String源码解析

String源码解析

1.理解用final修饰的String类

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

被final修饰String类不能被其他类所继承;

value是被final修饰的字符串数组变量,该变量的值在编译期间必须被确定,并且在运行期间不能被修改。

2.String的无参构造

public String() {
        this.value = "".value;
    }

this指的是被new出来的字符串对象,代指调用String无参构造方法的原来的变量,""指的是空字符串,相当于把原来的字符串赋值为空字符串。

3.String str = new String("zs");创建了多少对象

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

String源码如上,new String();是new在堆里面开辟了一块空间,存放了返回值的地址,这是创建的第一个对象;由源码可知,一个带参数的String的构造方法,参数会在常量池里面被创建。所以String str = new String("zs");共创建了两个对象。

4.复制新数组给原数组

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

this.value指原来的数组,Arrays.copyOf(原数组,长度);value.length是传入的有效长度,Arrays.copyOf(原数组,长度);开辟一块空间将传入的数组复制给原来的数组。

posted @ 2026-04-25 15:50  -柘  阅读(20)  评论(0)    收藏  举报