为了账号安全,请及时绑定邮箱和手机立即绑定

什么是不变的?

什么是不变的?

德玛西亚99 2019-06-20 16:13:29
什么是不变的?这可能是有史以来最愚蠢的问题,但我认为对于一个Java新手来说,这是一个相当令人困惑的问题。有人能澄清什么是什么意思吗?不变?为什么String不变?不可变对象的优点/缺点是什么?为什么可变对象(如StringBuilder优先于弦乐和反诗?一个很好的例子(在Java中)将是非常感谢的。
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

实际上,如果使用上面提到的Wikipedia定义,字符串并不是不可变的。

String的状态确实会改变构建后的状态。看看hashcode()方法。String在本地字段中缓存hashcode值,但在第一次调用hashcode()之前不会计算它。这种对hashcode的惰性计算将字符串作为一个不可变对象放置在一个有趣的位置,其状态会发生变化,但如果不使用反射,则无法观察到它已经发生了更改。

因此,也许不变的定义应该是一个不能被观察到已经改变的对象。

如果在创建不可变对象之后状态发生了变化,但是没有人能够看到它(没有反射),那么该对象是否仍然是不可变的?


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 466 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号