当前位置: 首页 > 知识库问答 >
问题:

Java整数池。为什么?

贡俊
2023-03-14

除了让新手程序员将整数对象与==进行比较,以确定它们是否是相同的数字之外,我认为这样做没有什么意义,但我认为这是不好的,因为他们肯定认为可以将任何整数与==进行比较,而且在任何编程语言中都教给了一种不好的做法:用==比较两个“不同”对象的内容。

为什么这样做还有其他原因吗?或者这只是在设计语言时的一个错误决定(在我看来),就像JavaScript中的可选分号一样?

编辑:我在这里看到他们解释了行为:为什么整数常量池的行为在127时发生变化?

共有1个答案

朱慈
2023-03-14

它被称为Flyweight模式,用于最小化内存使用。

这些数字很可能被重复使用,并且像integer这样的autobox类型是不可变的(注意,这不仅仅是针对integer)。缓存它们可以减少大量实例,并减少GC(垃圾收集)工作。

JLS在5.1.7中涵盖了这一点。拳击转换特别通过说:

 类似资料:
  • 问题内容: 我到处都读到过,当您在Java中定义介于-128到127之间的Integer时,它不会创建新对象,而是返回已经创建的对象。 除了让新手程序员比较Integer对象以查看它们是否具有相同的数字外,我看不到这样做的任何意义,但是我认为这很糟糕,因为确保他们认为可以将任何Integer对象与进行比较,并且还在教学在任何编程语言中都不好的做法:将两个“不同”对象的内容与进行比较。 这样做有其他

  • 我无法理解整数的Java常量池是如何工作的。 我理解字符串的行为,因此能够证明整数常量也是同样的情况。 因此,对于整数 (&A) 直到现在一切都在我脑海中浮现。 我不能理解的是,当我从127增加整数时,它的行为不同。此行为在127之后发生变化,下面是代码片段 有人能帮我理解一下吗?

  • 问题内容: 我试图了解此Python 2.7.5示例脚本的输出: 这产生输出: 2015-08-06 10:13 2015-08-06 10:13 2015-08-06 10:13 170339 170357 170345 170346 171232 170363 2015-08-06 10:13 2015-08-06 10:13 2015-08-06 10:13 我的问题是: A)为什么时间在开

  • 问题内容: 任何数据类型的上限(不包括)总是比下限的绝对值小1。 例如,an的上限为2,147,483,647,ABS(下限)= 2,147,483,648。 是否有理由总是总是比负整数多一个负整数? 编辑:更改,因为问题与数据库不直接相关 问题答案: 您提供的类型是有符号整数。让我们来看一个字节(8位)的示例。使用1字节,您可以使用组合来存储256个可能的数字。 现在,您要具有相同数量的正数和负

  • 问题内容: 我知道整数在Java中是不可变的。但是为什么要这样设计呢? 我找不到强制Integer不可变的用例。是否有类似String的技术原因? 字符串在网络连接,数据库URL等中用作参数。如果它是可变的,则很容易遭到破坏。 支持StringPool功能。 支持使用字符串作为参数的类加载机制。字符串可变会导致加载错误的类。 我知道有些包装很易变。 更新: 从对话中,并没有普遍的理由要求整数是不可

  • 问题内容: 如何检查Java整数是否为另一个数字的倍数?例如,if 是4的倍数。 问题答案: 使用余数运算符(也称为模运算符),该运算符返回除法的余数,并检查其是否为零: