val-mutable 和 var-imuatble 如何选择

对于 val 修饰的 mutable 类型的数据和 var 修饰的 immutable 类型的数据,两者之间,哪只种方式更安全呢?

这是一个十常见的问题,难的是找到两者之间的共同点。

首先,我们应该最大程度遵守引用透明性的原则。那什么是引用透明性呢?也就是说,如果存在一个表达式 e ,对于 val x = e 成立,并且 可以用 x 替代 e ; 这是可变性的特点。无论你什么时候设计一个代码决策,最好能够最大限度地遵守引用透明性的原则。

在实际开发中,对于方法内的 var ,其安全性是最高的,因为它不会逃逸到方法外部,也就不存在更改的可能性。如果实际代码中,并不如此,就尽量将方法分解成副作用最小的方法。

另一方面,一个可变的集合有可能逃脱,即使它没有。在更改代码时,您可能希望将其传递给其他方法,或者返回它。这是一种打破引用透明性的东西。

在一个对象(一个字段)上,如果发生逃逸,会产生更可怕的后果。无论哪种方式,对象都具有状态,因此,打破了引用透明性。但是,拥有一个可变的集合意味着即使对象本身也可能由于被修改而失去对自身状态的控制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值