关于String类的源码如图:
首先要知道final修饰的类表示最终类,是不可被继承的,而String类就是用了final关键字来修饰,这就使得String类作为最终类不能被子类继承,避免破坏String的不可变性。
再看成员变量value同样使用了final关键字修饰,保证了value的引用地址不可变。
String[] value = {"1","2","3","4","5"};
String[] num= {"1","2"};
value=num;//编译器报错,不允许指向新的内存空间
但它的本质是一个byte数组,所以数组内的具体元素并不受影响,是可以改变的。
举例:
public class Demo {
public static void main(String[] args){
final int[] value = {"1","2","3","4","5"};
int[2]="4";
System.out.println(Arrays.toString(value));
}
}
当截取字符串时,截取后也会对新字符串分配新的内存空间,不会对原字符串造成影响。
举例:
public class Demo {
public static void main(String[] args){
String value="12334";
String ret=value.substring(2);
System.out.println(value);
System.out.println(ret);
}
}
结果如图: