这是之前在网上看到的一个问题,我就是总结一下。
什么是不可变对象:
如果一个对象,在它创建完成后,不能在改变它的状态,那么这个对象就是不可变的。不能改变这个对象的状态就是:不改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。
String类是一个final类,是不能被继承的
区分对象和对象的引用
public class Person {
public static void main(String[] args) {
String s = "abcd";
System.out.println("s = "+s);
s = "123456";
System.out.println("s = "+s);
}
}
这里的s看上去被改变了,但是s却是String对象的引用,它指向了一个具体的对象,而s的改变其实就是它所指向的对象发生了改变。
private final char value[];
//String是将输入的字符串封装为字符数组value[]就是这个数组的长度
private int hash;
//是对象的哈西值的缓存
以上是JDK 1.7中的String源代码,由以上代码可以看出
String其实就是对字符数组的封装,在java中数组也是对象,value也只是一个引用,它指向了一个真正的数组对象。而在JDK 1.6中, value是String封装的数组,offset是String在这个value数组中的起始位置,count是String所占的字符的个数。也可以得出这个结论的
并且我们发现value,offset,count都是private final,并且类中也没有提供get()和set()方法。这点也可以看出String是无法修改的.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。