由于我是Java新手,如果有一个内置类型已经设计好处理IP地址,请随意指出 ;)
为了保证可移植性,Java为其数据类型设定了特定的宽度。即使在64位平台上,整数也是32位宽。 Java语言规范非常明确地表示(我稍微改写了一下以便更易读):
整型有byte、short、int和long,值分别为8位、16位、32位和64位的带符号二进制补码整数,char则是16位无符号整数,代表UTF-16代码单元。
这可能是由于C语言存在许多可移植性问题所导致的,其中包括不同宽度(甚至编码方式,例如二进制补码、反码和原码)的整数。Java希望避免这些问题,特别是因为它旨在运行在尽可能多的不同平台上。
至于用于处理IP地址的内置类型,Java有Inet4Address和Inet6Address,具体取决于您的需要(以及它们的共同祖先InetAddress)。
即使在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可以管理的内存量。
但是,64位VM的内部实现将影响内存使用:
一般来说,与在32位VM上运行相同的应用程序相比,能够寻址更大内存的好处伴随着64位VM中的小型性能损失。这是因为系统中的每个本地指针占用8个字节而不是4个字节。加载此额外数据会影响内存使用情况,这会转化为稍微较慢的执行,具体取决于在执行Java程序期间加载了多少指针。
来自: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#64bit_description
int
类型,它在所有Java平台上都是32位的;请参见JLS 4.2.1。如果您担心在内存中表示大量IP地址时的内存使用情况,那么可能需要采取以下措施:
int
类型。但是,您没有必要使用它来表示IP地址,特别是因为您不需要对它们进行算术运算。Java的int原始类型具有固定的32位大小。
int
在每个平台上都是32位的。但是,要使它无符号,您必须手动移位数字等 - 这确实变得复杂。为什么不使用byte[]或long呢?
来自http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html:
整数类型包括byte、short、int和long,它们的值分别为8位、16位、32位和64位的带符号二进制补码整数,char类型的值是16位无符号整数,表示Unicode字符。
因此,按定义,int
已经是32位的,尽管解释器可能会将其放在64位边界上以加快访问速度。
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
int
是32位类型?! - Khaled Alshaya