【问题标题】:On a 64-bit machine is the size of an int in Java 32 bits or 64 bits?在 64 位机器上,Java 中 int 的大小是 32 位还是 64 位?
【发布时间】:2013-12-24 19:51:36
【问题描述】:

在 64 位机器上,Java 中 int 的大小是 32 位还是 64 位?

【问题讨论】:

    标签: java


    【解决方案1】:

    32 位。整数的大小不随底层计算机而变化,这是 Java 语言的特性之一。见the relevant section of the spec

    【讨论】:

    • 在使用 64 位 javac 编译器编译并使用 64 位 jvm 解释后,在 java 中提供 32 位的 int 大小从应用程序的规模增强角度来看是一个很大的缺点?因为如果我有 int 类型model_number 这是short 类型parent_idshort 类型model_id 的位级连接。如何在现有应用程序中将model_number 增强为 64 位?使用long 类型需要在企业应用程序中进行大量代码更改。你认为首先使用int 是一个错误的决定吗?
    • 短值始终为 16 位。连接它们将始终是 32 位(一个 int)。所以我不会更改代码。 JIT 编译器处理了较大平台上 32 位 int 和 64 位 int 之间的性能差异。
    • 我的意思是说,如果我将parent_idmodel_idshort 类型更改为int,那么我想将model_number 视为64 位。
    • 我很好奇为什么您首先使用串联而不是类中的两个成员变量。但是,是的,如果您更改 parent_idmodel_id,您也必须更改 model_number
    • 因为model_number 位于数据库中以保持持久性。所以,我需要在存储到数据库之前在位级别进行连接。我的问题是,我如何通过将long 声明为model_number 之后将其设置为 64 位?为此,我需要更改使用 32 位 int 的现有完整代码。
    【解决方案2】:

    原始数据的大小是virtual machine specification, 的一部分并且不会改变。将改变的是对象引用的大小,从 32 位变为 64。因此,相同的程序在 64 位 JVM 上将需要更多内存。其影响取决于您的应用程序,但可能非常重要。

    【讨论】:

    【解决方案3】:

    如果需要 64 位整数,请使用 long。

    【讨论】:

      【解决方案4】:

      32 位。 Java 的运行方式与运行它的机器或操作系统无关,至少对于原始数据类型来说确实如此。

      【讨论】:

        【解决方案5】:

        这就是“编译一次,随处运行”口号的结果之一:Java 执行独立于底层硬件字长和字节序; JVM 在任何地方都以相同的方式工作。

        这种独立性保证比尝试将操作系统抽象出来要好得多;-)

        【讨论】:

          【解决方案6】:

          是的,它是 32 位

          【讨论】:

            【解决方案7】:

            另一个通常被误解的事实是尺寸 这些数据类型将始终相同,无论 我们的程序正在运行的架构。所以你可能正在运行你的 在 64 位机器中编程,但 int 将始终是 32 位 long 所以它将具有相同的范围。这对于 C# 和 Java。

            这是关于此事的完整文章:

            Integral data types in Java and C#.

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-04-16
              • 2011-01-24
              • 1970-01-01
              • 2011-04-19
              • 1970-01-01
              • 2012-03-17
              相关资源
              最近更新 更多