我看不出为什么 boolean 包装类是不可变的。
为什么 Boolean Wrapper 没有像 Commons lang 中的 MutableBoolean 那样实现,实际上可以重置。
有没有人对此有任何想法/理解?谢谢。
最佳答案
因为2
是2。明天不会是3
。
不可变始终是首选的默认值,尤其是在多线程情况下,它使代码更易于阅读和更易于维护。例证:Java Date
API 充满了设计缺陷。如果 Date
是不可变的,那么 API 将会非常精简。我会知道 Date
操作会创建新日期,并且永远不必寻找修改它们的 API。
阅读并发实践,了解不可变类型的真正重要性。
但还要注意,如果出于某种原因您需要可变类型,请使用 AtomicInteger
AtomicBoolean
等。为什么要使用 Atomic
?因为通过引入可变性,您引入了对线程安全的需求。如果您的类型保持不可变,您将不需要它,因此在使用可变类型时,您还必须为考虑线程安全和使用 concurrent
包中的类型付出代价。欢迎来到美妙的并发编程世界。
另外,对于 Boolean
- 我挑战你说出一个你可能想要执行的操作,它关心 Boolean 是否可变。设置为真?使用 myBool = true
。那是重新分配,而不是突变。否定? myBool = !myBool
。同样的规则。请注意,不变性是一个特性,而不是一个约束,因此如果您可以提供它,您应该提供它——在这些情况下,您当然可以。
请注意,这也适用于其他类型。整数最微妙的地方是 count++
,但那只是 count = count + 1
,除非你关心以原子方式获取值......在这种情况下使用可变原子整数
。
关于java - 为什么java中的Boolean这样的Wrapper类是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194226/