什么是不变的?

什么是不变的?

这可能是有史以来最愚蠢的问题,但我认为对于一个Java新手来说,这是一个相当令人困惑的问题。

  1. 有人能澄清什么是什么意思吗?

    不变?

  2. 为什么

    String

    不变?
  3. 不可变对象的优点/缺点是什么?
  4. 为什么可变对象(如

    StringBuilder

    优先于弦乐和反诗?

一个很好的例子(在Java中)将是非常感谢的。



德玛西亚99
浏览 467回答 3
3回答

慕码人8056858

实际上,如果使用上面提到的Wikipedia定义,字符串并不是不可变的。String的状态确实会改变构建后的状态。看看hashcode()方法。String在本地字段中缓存hashcode值,但在第一次调用hashcode()之前不会计算它。这种对hashcode的惰性计算将字符串作为一个不可变对象放置在一个有趣的位置,其状态会发生变化,但如果不使用反射,则无法观察到它已经发生了更改。因此,也许不变的定义应该是一个不能被观察到已经改变的对象。如果在创建不可变对象之后状态发生了变化,但是没有人能够看到它(没有反射),那么该对象是否仍然是不可变的?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java