作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我知道适用于一般不可变类的常见原因,即
但是,包装类表示原始类型,而原始类型是可变的。那么为什么包装类不可变呢?
最佳答案
However, wrapper classes represent primitive types, and primitive types (except String) are mutable.
首先,String 不是原始类型。
其次,谈论原始类型是可变的是没有意义的。如果您像这样更改 变量 的值:
int x = 5;
x = 6;
这并没有改变数字 5 - 它改变了 x
的值。
虽然包装器类型可以设置为可变的,但在我看来,这样做会很烦人。我经常使用这些类型的只读集合,并且不希望它们是可变的。偶尔我想要一个可变的等价物,但在这种情况下,很容易想出一个,或者使用 Atomic*
类。
我发现自己希望 Date
和 Calendar
是不可变的,而不是希望 Integer
是可变的......(当然,我通常会使用 Joda Time,但 Joda Time 的好处之一是 不变性。)
关于java - 为什么 Java 包装类是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370544/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!