String字符串存储:分析字符串是不可变对象的原因
String字符串存储
-
String字符串:存储分析
-
-
1.1源码分析:构造方法,用于创建对象;
//1,String的构造方法:String();
public String() {
this.value = "".value;
}
?
//2,String的构造方法:String(String);
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
?
//3,String的构造方法:String(char[]); //重点分析
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
?
/*
?
笔记:
1,根据构造方法3,可以看出,String内部维护了一个char[]数组,调用Arrays类的copyOf方法;
2,分析Arrays类;
3,分析copyOf()方法:该方法被static修饰,不能被子类重写;存放在内存的方法区,只有一份!
?
*/
? -
1.2:字符数组存储:
-
字符数组:Arrays.copyOf();
-
该方法被static修饰,不能被子类重写;static修饰的方法,存放在方法区;
?
/**
* 总结:分析Arrays类:
*
*/
public class ArraysDemo01 {
public static void main(String[] args) {
?
//1.1 定义一个字符数组
char[] charArr=new char[5];
?
//1.2 给数组赋值
charArr[0]='h';
charArr[1]='e';
charArr[2]='l';
charArr[3]='l';
charArr[4]='o';
?
//1.3 遍历数组
for (char x: charArr) {
System.out.print(x);//hello
}
?
System.out.println("-----------------");
?
/**
* 用Arrays类的copyOf(char[],int i)方法:
* 1,参数类型:char[]数组,int类型;
* 2,返回值类型:char[];
* 3,该方法被static修饰;
*/
//1.4
char[] charArr1=Arrays.copyOf(charArr,5);
?
for (char c:charArr1) {
System.out.print(c);//hello
}
?
?
}
}
-
-