在一台64位的计算机上,Java中int类型的大小是32位还是64位?

70

在64位计算机上,Java中int类型的大小是32位还是64位?

7个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
85

32位。这是Java语言的一个特性,整数的大小不会因为底层计算机而变化。请参见规范的相关章节


在使用64位javac编译器进行编译并使用64位jvm进行解释后,在Java中提供32位的int大小,从应用程序规模增强的角度来看,这是一个很大的劣势。因为如果我有一个int类型的model_number,它是由short类型的parent_idshort类型的model_id位级拼接而成的。如何在现有应用程序中将model_number增强到64位?使用long类型将需要在企业应用程序中进行大量代码更改。您认为最初使用int是错误的决定吗? - overexchange
短值始终是16位。将它们连接起来总是32位(int)。因此,我不会更改代码。 JIT编译器会处理较大平台上32位int和64位int之间的性能差异。 - Thomas Jones-Low
我的意思是,如果我将parent_idmodel_id的类型从short更改为int,那么我希望将model_number视为64位。 - overexchange
我很好奇你为什么要在第一次使用连接而不是类中的两个成员变量。但是,如果你改变了parent_idmodel_id,你也必须改变model_number - Thomas Jones-Low
因为model_number需要在数据库中持久化,所以我需要在存储到数据库之前在位级别上进行连接。我的问题是,如果我将其声明为“long”,如何使model_number成为64位?为此,我需要更改现有的完整代码,使用32位的“int”。 - overexchange

23
原始数据的大小是虚拟机规范的一部分,并且不会改变。将更改对象引用的大小,从32位到64位。因此,在64位JVM上,相同的程序将需要更多的内存。这对您的应用程序产生的影响取决于具体情况,但可能非常显著。

Java源代码可以使用32位Javac编译器编译,然后在64位JVM上运行吗?这个类文件是否能够利用更多的内存? - overexchange
是的。类文件是相同的。编译的位置并不重要,只有运行时环境才重要。 - erickson
该链接指向的是Java语言规范,而非Java虚拟机规范 - anishpatel

9
如果您需要一个64位整数,可以使用long类型。

4

32位。Java旨在无论在哪台计算机或操作系统上运行,都应该运行相同的代码,至少对于基本数据类型来说是这样。


2

“编译一次,到处运行”是Java的口号之一,这也带来了一个后果:Java执行与底层硬件的字长和大小端无关;JVM在任何地方都能够以相同的方式工作。

这种独立性的保证比试图抽象化操作系统要好得多;-)


0

是的,它是32位


0
通常被误解的另一个观点是,这些数据类型的大小将始终相同,无论我们的程序运行在什么体系结构上。所以,即使你在64位机器上运行程序,int仍然是32位长,因此它将具有相同的范围。这对C#和Java都成立。

这里提供了完整的文章:

Java和C#中的整数数据类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,