String类的不可变性

String类的不可变性

1.什么是不可变性?

​ Java中的String类是不可变的.那么一般对不可变对象的理解是:如果一个对象,在它创建完成后,不能再改变它的状态,则这个对象是不可变的.

​ 不能改变状态是指,不能改变对象内部的成员变量,包括基本数据类的值不能变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变.

2.区分对象和对象的引用

1
2
3
4
5
6
String s = "Djt";
System.out.println("s = " + s);
//结果:s = Djt
s = "djt";
System.out.println("s = " + s);
//结果 s = djt

​ 从上边的代码可看出,s的结果发生了改变.那么和String类的不可变性是矛盾的码?这里是一个误区,我们说的不可变性是指String对象的不可变性,而这里的s只是一个String对象的引用,并不是对象本身.

​ 对象时在内存中的一块内存,内存的大小根据对象中成员变量的多少来决定;引用只是一个4字节的数据,里边存放着它所指的对象的地址,通过这个地址可以访问对象.

​ 对象就像是一个屋子,对象的地址就好比时屋子的钥匙,而引用只是用来装钥匙的盒子,所以上边的代码中,s第一次装的是"Djt"的"钥匙",第二次装的是"djt"的"钥匙",但是屋子以及屋子里的东西没有改变.

3.String类的不可变性

​ 对于String类的不可变性,主要是因为源码中,其内部使用了private final修饰成员.