如何在java中声明32位整数?

Joe*_*orn 6 java integer 32bit-64bit

我正在寻找一个在32位和64位系统上运行的java应用程序,它主要处理IP地址.这些IP地址保持为整数,正常类型在64位平台上浪费了大量内存(是的,内存使用已经被证明是一个问题).即使在x64体系结构上,如何声明32位整数值仍然保持在32位?

因为我是一个java新手,如果有一个已经设计用于处理IP地址的内置类型,请随时指出我;)

pax*_*blo 29

Java具有特定的数据类型宽度,以实现可移植性.即使在64位平台上,整数也是32位宽.在Java语言规范的状态相当清楚(略转述,使更具可读性,在我看来):

整数类型是byte,short,int和long,其值分别是8位,16位,32位和64位带符号的二进制补码整数,以及char,其值为16位无符号整数,表示UTF-16代码单元.

这可以说是由于在C中发现的许多可移植性问题,它们具有不同的宽度(甚至是编码,例如两个补码,一个补码和符号/幅度),这些整数是Java希望避免的,特别是因为它意味着可以运行多个不同的平台尽可能.

至于处理IP地址的内置类型,Java同时具有Inet4AddressInet6Address,具体取决于您的需求(以及它们的共同祖先,InetAddress).

  • @Joel Java没有unsigned (5认同)

dmc*_*mck 9

即使在64位机器上,int也将是32位,你不需要做任何事情.

来自Java语言规范(http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

int数据类型是32位带符号的二进制补码整数.它的最小值为-2,147,483,648,最大值为2,147,483,647(含).对于整数值,此数据类型通常是默认选择.此数据类型很可能足以容纳您的程序将使用的数字,但如果您需要更宽范围的值,请使用long.

32位和64位Java VM之间的主要区别是最大堆大小,即VM可以管理的内存量.

但是,64位虚拟机的内部实现会对内存使用产生影响:

通常,与在32位VM上运行相同的应用程序相比,能够处理更大量内存的好处与64位VM中的性能损失相比较小.这是因为系统中的每个本机指针占用8个字节而不是4个.此额外数据的加载会对内存使用产生影响,这会导致执行速度稍慢,具体取决于执行期间加载的指针数量.你的Java程序.

来自:http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#64bit_description