【问题标题】:Is there difference for Integer.MAX_VALUE between 32bit JVM and 64bit JVM?32 位 JVM 和 64 位 JVM 之间的 Integer.MAX_VALUE 有区别吗?
【发布时间】:2011-12-12 11:18:08
【问题描述】:

Integer.MAX_VALUE 的值在 32 位 JVM 和 64 位 JVM 之间是否不同?

我正在使用 32 位 JDK 编译 Java 类并将其部署在 64 位机器上。我只是想确保我可以依赖检测if (aNumber == Integer.MAX_VALUE)

【问题讨论】:

    标签: java integer


    【解决方案1】:

    没有。 32 位 JDK 为实例创建 32 位地址,而 64 位 JDK 为对象实例创建 64 位地址。因此, Integer.MAX_VALUE 是相同的,因为它只是一个值,而不是对象地址。 :)

    【讨论】:

    • 请注意,64 位 JVM可以 使用 32 位引用。详情请见CompressedOops
    【解决方案2】:

    没有。根据定义Integer.MAX_VAlUE = 2^31 - 1

    Integer.MAX_VALUE

    【讨论】:

    • 它更进一步:编译平台根本没有区别:输出将是相同的。在理想的世界中,即使是 runtime 平台也没有什么不同,但这里可能会有细微的差别。
    【解决方案3】:

    无论运行代码的 JVM 是 32 位还是 64 位,此常量都具有相同的值。 documentation for Integer.MAX_VALUE 将此值描述为:

    一个保持int 可以拥有的最大值的常量,231-1。

    【讨论】:

      【解决方案4】:

      您可能希望避免使用= 符号比较整数,原因如下:

      Comparing Integers(前提是aNumber是java.lang.Integer类的对象)

      不,没有区别。

      【讨论】:

      • 感谢您提供的额外信息。只是想知道在什么情况下我们需要对 (Integer == Integer) 进行参考检查?我们不应该总是只需要价值检查吗?那么为什么没有人在 Integer 上重载运算符 '==' 呢?
      【解决方案5】:

      所有 32 位和 64 位的相似之处在于它们可以引用的内存位置的数量。在 32 位的情况下,可能的地址数为 2^32,在 64 位的情况下为 2^64。

      jvm 版本与 Integer.MAX_VALUE 无关,保持不变。

      【讨论】:

        猜你喜欢
        • 2014-08-09
        • 2011-06-26
        • 2012-09-19
        • 2011-12-25
        • 2013-09-16
        • 2013-09-13
        • 2012-03-17
        • 2011-09-04
        • 2012-03-19
        相关资源
        最近更新 更多