这是一个大神的csdn账号,我只是最近帮忙写点东西在里面,其实也算不上帮忙,毕竟我是个菜鸟级别的,所以朋友们有兴趣就看一下,如果是大神的话请忽略吧~
参考上一篇文章,再加上网上的资料,我说说java中String为什么是不可变的。仅仅作为一个日后可以参考的学习资料。
String的成员变量
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
...
这个是JDK1.8中String源码的前两个成员变量,可以看到value[]被声明成private和final类型,也就是说不仅外部无法访问String中的这个value,在String对象内部也是不可以改变value的值的,value一旦被赋值就不可再改变。
那么问题来了,我们平常我们不是可以这样的吗?
String s = "123";
System.out.println(s);
s = "234";
System.out.println(s);
输出结果为:
123
234
这看起来String的值不是改变了么?但其实String的值并没有改变,第一句String s = “123”创建了一个值为123的String对象,这个对象的引用是s,第二句s = “234”创建了一个新的值为”234”的String对象,并且让之前的引用s指向新的对象。这个过程中s的指向有变化,所以输出s的值时候显示有变化,但是两个String对象在这个过程中本身都没有变化。
恩,我就是这么理解的,有什么不对的地方欢迎大家指出~