gpt4 book ai didi

java - 为什么整数在 Java 中是不可变的?

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:41 25 4
gpt4 key购买 nike

我知道整数在 Java 中是不可变的。但是为什么要这样设计呢?

在问这个问题之前,我浏览了其他答案:

Is Integer Immutable

i++ still working for immutable Integer in Java?

Why are Java wrapper classes immutable?

但我找不到要求 Integer 不可变的用例。是否有像 String 那样的技术原因?

  1. 字符串在网络连接、数据库 URL 等中用作参数。如果它是可变的,则很容易被破坏。
  2. 支持 StringPool 设施。
  3. 支持使用字符串作为参数的类加载机制。字符串可变会导致加载错误的类。

我知道有像 AtomicInteger 这样的可变包装器。

更新:

从谈话中可以看出,没有普遍的理由可以强制整数不可变。然而,通过做不可变的,它提供了答案中提到的一些好处。

例如 Andrey 中的这句话

possibility to cache.

Others are reducing global state

easier multithreading

最佳答案

您找不到为什么 java.lang 包装器必须不可变 的强制性理由。仅仅是因为这是一个设计决定。他们本可以做出其他决定。语言设计者必须在可变不可变 之间做出选择。他们选择了不可变。就是这样。

有一些令人信服 (IMO) 的理由使它们不可变:

String一致。您为 String immutable 提供的相同推理也适用于 Integer 等(例如,考虑属性映射中的端口号) . 这通常适用于任何可变类型

不可变 类型排除了人们可能犯的大量难以发现的错误,即人们通过修改通过 getter 获得的值而无意中更改了对象成员值。 当类型不可变时,它可以节省大量防御性复制。最臭名昭著的例子是 java.util.Date,通常使用起来很痛苦,因为它可变(撇开 API 问题不谈)。

不可变类型也允许使用共享实例,例如Integer 用于常用值(参见 Integer.valueOf(int))。

关于java - 为什么整数在 Java 中是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com