美文网首页
2018-03-22

2018-03-22

作者: nikown | 来源:发表于2018-03-22 16:43 被阅读0次

java学习随笔2

String不可变的理解

查看String的源码,可以发现String的class的修饰词是fianl,各个变量的修饰词也是final,表明它并不能改变(其实可以改变value的值对String进行改变,但是Java中并没有可以实现改变一个String的value数组的方法,所以可以理解为Strng是不可变的):

public final class String implements java.io.Serializable, Comparable, CharSequence

{

    /** The value is used for character storage. */

    private final char value[];

    /** The offset is the first index of the storage that is used. */

    private final int offset;

    /** The count is the number of characters in the String. */

    private final int count;

    /** Cache the hash code for the string */

    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */

    private static final long serialVersionUID = -6849794470754667710L;

    ........

}

一个小小的证明

下面代码的输出结果是“22”,没有报错。

String str=“11”;

str=“22”;

System.out.println(str);

但是改成以下的代码

String str=“11”;

System.out.println(str.hashCode());

str=“22”;

System.out.println(str.hashCode());

System.out.println(str);

可以发现两次输出的hashCode是不一样的,证明两个str不是同一个对象。所以改变String的操作是新实例化了一个String对象,而不是改变员String的值。

相关文章

网友评论

      本文标题:2018-03-22

      本文链接:https://www.haomeiwen.com/subject/jfoaqftx.html