gpt4 book ai didi

java - 为什么 Java 包装类是不可变的?

转载 作者:IT老高 更新时间:2023-10-28 20:49:09 27 4
gpt4 key购买 nike

我知道适用于一般不可变类的常见原因,即

  1. 不能作为副作用改变
  2. 很容易推断他们的状态
  3. 本质上是线程安全的
  4. 无需提供克隆/拷贝构造函数/工厂拷贝方法
  5. 实例缓存
  6. 无需防御性副本。

但是,包装类表示原始类型,而原始类型是可变的。那么为什么包装类不可变呢?

最佳答案

However, wrapper classes represent primitive types, and primitive types (except String) are mutable.

首先,String 不是原始类型。

其次,谈论原始类型是可变的是没有意义的。如果您像这样更改 变量 的值:

int x = 5;
x = 6;

这并没有改变数字 5 - 它改变了 x 的值。

虽然包装器类型可以设置为可变的,但在我看来,这样做会很烦人。我经常使用这些类型的只读集合,并且不希望它们是可变的。偶尔我想要一个可变的等价物,但在这种情况下,很容易想出一个,或者使用 Atomic* 类。

我发现自己希望 DateCalendar 是不可变的,而不是希望 Integer 是可变的......(当然,我通常会使用 Joda Time,但 Joda Time 的好处之一是 不变性。)

关于java - 为什么 Java 包装类是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370544/

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