为什么像java中的布尔类包装类是不可变的?

我看不出布尔包装器类成为不可变的原因。

为什么布尔包装器没有像Commons lang中的MutableBoolean那样实现,实际上可以重置。

有没有人对此有任何想法/理解? 谢谢。

因为2是2.明天不会是3

永久性首选是永久性的, 尤其是在multithreading情况下,它使得更容易阅读和更易于维护的代码。 例证:Java Date API,它充满了设计缺陷。 如果Date是不可变的,那么API将非常精简。 我知道Date操作会创建新日期,并且永远不必查找修改它们的API。

阅读实践中的并发以了解不可变类型的真正重要性。

但是请注意,如果由于某种原因你需要可变类型,请使用AtomicInteger AtomicBoolean等。为什么Atomic ? 因为通过引入可变性,您引入了对线程安全性的需求。 如果您的类型保持不变,那么您就不需要这样,因此在使用可变类型时,您还必须考虑线程安全性和使用并发包中的类型。 欢迎来到并发编程的精彩世界。

此外,对于Boolean – 我要求您命名一个您可能想要执行的操作,该操作关注布尔值是否可变。 设为真? 使用myBool = true 。 这是重新分配,而不是变异。 否定? myBool = !myBool 。 同样的规则。 请注意,不变性是一个特征 ,而不是约束,所以如果你提供它,你应该 – 在这些情况下,你当然可以。

请注意,这也适用于其他类型。 整数最微妙的东西是count++ ,但这只是count = count + 1 ,除非你关心以primefaces方式获取值…在这种情况下使用可变的AtomicInteger

Java中的包装类是不可变的,因此运行时只能有两个布尔对象 – 一个用于true,一个用于false – 每个变量都是对这两个中的一个的引用。 而且因为它们永远不会改变,你知道它们永远不会从你身下被拉出来。 这不仅可以节省内存,还可以让你的代码更易于推理 – 因为你知道的包装类永远不会改变它们的价值,它们不会突然跳到一个新值,因为它们是偶然的在别处引用相同的值。

类似地,Integer具有所有有符号字节值的缓存 – -128到127 – 因此运行时不必具有那些常见Integer值的额外实例。

Patashu是最接近的。 Java中许多愚蠢的设计选择都是因为他们实现VM的方式有限。 我认为最初他们试图为C或C ++制作一个VM,但它太难了(不可能?)所以制作了另一个类似的语言。 写一个,到处跑! 任何计算机技术certificate都像其他人一样狡猾,这只是事后的事情。 如您所知,Java和C#正在发展为与C一样强大。当然,它们更清晰。 应该是十年后设计的语言! 简单的诀窍是制作一个“持有者”类。 或者现在使用封闭装置! 也许Java正在发展成为JavaScript。 大声笑。

布尔或任何其他包装类在java中是不可变的。 由于包装类用作存储简单数据的变量,因此这些应该是安全的,并且必须保持数据完整性以避免不一致或不需要的结果。 此外,不变性通过避免重复对象来节省大量内存。 更多内容可以在文章中找到为什么Strings&Wrapper类在java中设计为不可变的?