为什么Java包装器类是不可变的?
我知道适用于一般不可变类的常见原因,即
- 不能改变为副作用
- 容易推断他们的状态
- 本质上是线程安全的
- 无需提供克隆/复制构造函数/工厂复制方法
- 实例缓存
- 无需防御副本。
但是,包装器类表示原始类型,并且原始类型是可变的。那么为什么包装器类不可变?
回答:
但是,包装器类表示原始类型,并且原始类型(String除外)是可变的。
首先,String不是原始类型。
其次,谈论原始类型是可变的没有意义。如果您像这样更改 变量 的值:
int x = 5;x = 6;
那不是在更改数字5,而是在更改的值x
。
在我看来,尽管包装器类型本来可以变得可变,但这样做却很烦人。我经常使用这些类型的只读集合,并且不希望它们是可更改的。偶尔我想要一个可变的等效项,但是在那种情况下,提出一个或使用这些Atomic*
类就足够了。
我发现自己希望这样做,Date
并且Calendar
变得不可变的频率要比我希望Integer
自己变得可变的要多得多(当然,我通常会去找Joda
Time,但是Joda Time的好处之一 就是 不变性。)
以上是 为什么Java包装器类是不可变的? 的全部内容, 来源链接: utcz.com/qa/404441.html