可变数据类型和不可变数据类型

目录

1.辨析可变与不可变

2.使用上的区别

3.优缺点

3.1可变数据类型:

3.2不可变数据类型

4.针对可变值的不可变引用

5.针对不可变值的可变引用


1.辨析可变与不可变

可变数据类型和不可变数据类型的可变和不可变性是指当值发生改变时,他们的内存地址是否改变。

可变数据类型:当值发生生改变时,直接在原有内存空间修改。

不可变数据类型:当值发生改变时,会重新开辟一个新的空间储存新的值。而不可变性是指原有的值仍储存在之前的内存空间中不能被改变。

2.使用上的区别

当只有一个引用指向该对象 ,二者没有区别.但是一旦出现多个引用,可变数据类型就可能会会出现意想不到的错误。

类似上图,String是不可变数据类型,当修改时会指向不同的内存空间。而StringBuilder是可变数据类型,都是在同一个内储存空间上进行修改。最终打印sb为abc,但是如果操作者没有意识到或知晓tb同时也会进行修改,那么就会出现和预期不同的结果。

3.优缺点

3.1可变数据类型:

优点:最少化拷贝,可以提高效率,获得更好的性能,适合于在多个模块之间共享数据

缺点:可变性使得难以理解程序正在做什么,更难满足方法的规约

3.2不可变数据类型

优点:不可变类型更“安全”,在其他质量指标上表现更好

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

4.针对可变值的不可变引用

final 使sb只能进行一次赋值,否则会报错。最终输出abcd

5.针对不可变值的可变引用

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值