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(原数组,长度);开辟一块空间将传入的数组复制给原来的数组。

浙公网安备 33010602011771号