Java不可变字符串String和Integer
时间:2019-04-29 03:17:56 来源:igfitidea点击:
不可变对象是在创建后不会更改其值的对象。
Java中最为人所知的不可变对象是字符串。
除了字符串之外,还有一个不可变的对象,这是Integer(类而不是基元数据类型),它的值比较有趣,-128到127之间放在一个常用池中。
根据不可变对象的定义,如果要实现自己的不可变类,它将如下所示:
final class MyImmutable { private final int value; //将它定义为 final public MyImmutable(int Value) { value = Value; } public int getValue() { return value; } }
不可变类
定义为final以防止继承;
属性被定义为final,防止其值被更改;
不包含更改其属性值的方法;
字符串对象Strign是不变的;
当使用=运算符
初始化字符串对象值时,它们的值存储在字符串常量池中;
当使用=
时,如果该值以前没有使用过,则JVM将在字符串常量池中创建一个新的字符串对象;否则,将字符串对象地址赋值给引用。
Java中的另一种不可变对象是Integer
(还有其他类型,如Double、Color…)。
JVM将-128到127之间的整数值存储在类似于字符串常量池的区域中,因为它们在很多情况下都会用到。
下面这个例子可以验证这一点
Integer i1 =100; //使用常量值 Integer i2 =100; if(i1 == i2) //比较引用值 System.out.println("引用值相等!"); else System.out.println("引用值不相等!"); i1 = 300; // 使用比较大的值 i2 = 300; if(i1 == i2) System.out.println( "引用值相等"); else System.out.println("引用值不相等");
输出结果:
引用值相等 引用值不相等
在第一个初始化(其中使用的值介于-128和127之间)中,两个Integer引用相等,因为它们引用同一个整数对象。
当值在-128和127区间之外时,这两个引用是不同的,因为我们有两个具有相同值的不同整数对象。