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

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

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

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

回答:

但是,包装器类表示原始类型,并且原始类型(String除外)是可变的。

首先,String不是原始类型。

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

int x = 5;

x = 6;

那不是在更改数字5,而是在更改的值x

在我看来,尽管包装器类型本来可以变得可变,但这样做却很烦人。我经常使用这些类型的只读集合,并且不希望它们是可更改的。偶尔我想要一个可变的等效项,但是在那种情况下,提出一个或使用这些Atomic*类就足够了。

我发现自己希望这样做,Date并且Calendar变得不可变的频率要比我希望Integer自己变得可变的要多得多(当然,我通常会去找Joda

Time,但是Joda Time的好处之一 就是 不变性。)

以上是 为什么Java包装器类是不可变的? 的全部内容, 来源链接: utcz.com/qa/404441.html

回到顶部