gpt4 book ai didi

Java 可变和不可变概念

转载 作者:行者123 更新时间:2023-12-02 03:25:52 27 4
gpt4 key购买 nike

我们可以创建一个包含可变对象的不可变对象(immutable对象)吗?有可能吗?请让我更清楚地了解这一点。

提前致谢。

最佳答案

是的,我们可以。

java.lang.String中的代码为例:

/** The value is used for character storage. **/
private final char value[];

显然数组是可变的,因为我们可以轻松地更改它们的内容,如下所示:

value[0] = '&';

但是String仍然是不可变的。也就是说,一旦创建,其内容就永远不会改变。这是怎么发生的?

因为即使 value 是可变的,String 的用户也没有“常规”方式来修改它:

  1. value 被声明为 private final。并且 String 本身是 final,意味着没有子类。
  2. 没有 setter 方法。也没有任何修改的方法。
  3. 我们可以从 char 数组创建一个字符串,但是 char 数组是在构造函数内部复制的,因此修改原始数组不会对新创建的字符串产生影响。
  4. value 字段也可以由多个 String 实例共享,但只要不泄露,就是安全的。
  5. 我们可以将字符串转换回字符数组,但同样,它是一个副本。

所以答案是肯定的,如果我们遵循 design strategy仔细。

关于Java 可变和不可变概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38907913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com