这是之前在网上看到的一个问题,我就是总结一下。
什么是不可变对象:
如果一个对象,在它创建完成后,不能在改变它的状态,那么这个对象就是不可变的。不能改变这个对象的状态就是:不改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。

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://www.importnew.com/16817.html提供的文章


JameHou
595 声望10 粉丝

我只想静静地写着代码,和相爱的人平淡的过完一生