Mutability And Immutability

一.Types in Java

 1.Java has several primitive types 基本数据类型, 

such as: 

– int (for integers like 5 and -200, but limited to the range ± 2^31, or roughly ± 2 billion)

 – long (for larger integers up to ± 2^63) 

– boolean (for true or false) 

– double (for floating-point numbers, which represent a subset of the real numbers) – char (for single characters like 'A' and '$' ) 

2.Java also has object types 对象数据类型, 

for example: 

– String represents a sequence of characters. 

– BigInteger represents an integer of arbitrary size


二.Mutability And Immutability

1.改变一个变量和改变一个变量的值的区别

改变一个变量:将该变量指向另一个值得存储空间

改变一个变量的值:将该变量当前指向的值的存储空间写入一个新的值

2.不变性

(1).不变数据类型:一旦被创建,其值不能改变

(2).不变的引用类型:一旦确定其指向的对象,不能再被改变 

exmple

final int n = 5;

final Person a = new Person(“Ross”); 

变量n的值不能被改变

引用a不能被改变

3.可变类和不可变类(Mutable and Immutable Objects)

可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容。 

不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容。不可变类的实例一但创建,其内在成员变量的值就不能被修改。 

举个例子:String和StringBuilder,String是immutable的,每次对于String对象的修改都将产生一个新的String对象,而原来的对象保持不变,而StringBuilder是mutable,因为每次对于它的对象的修改都作用于该对象本身,并没有产生新的对象。



4.Advantage of mutable types

 使用 不可变类型,对其频繁修改会产生大量的临时拷贝(需要垃圾回收) 

 可变类型最少化拷贝以提高效率 

使用可变数据类型,可获得更好的性能 

5.Risks of mutable types


在声明这里的对象时,对象t和t1的值其实是一个地址,也可以看成一个指向堆内存中某个对象的指针。让t1=t时,实际上也是让t1指向t指向的对象,通过t1改变num的值,也就是改变了堆内存中的对象的值,通过t再调用时,num的值自然也是改变后的结果。

相对于可变类型 ,不可变类型更“安全”,在其他质量指标上表现更好 

6.不可变引用

引用是不可变的,但指向 的值却可以是可变的 

可变的引用,也可指向不可变的值

exmple

final StringBuilder sb = new StringBuilder("abc"); 

sb.append("d"); 

sb = new StringBuilder("e"); //编译阶段会出错

System.out.println(sb);//输出:abcd



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值