代码之家  ›  专栏  ›  技术社区  ›  Joel Coehoorn

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

  •  6
  • Joel Coehoorn  · 技术社区  · 15 年前

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

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

    11 回复  |  直到 15 年前
        1
  •  29
  •   paxdiablo    10 年前

    Java拥有 具体的 数据类型的宽度,便于移植。即使在64位平台上,整数也有32位宽。这个 Java language specification 国家 quite clearly (在我看来,稍微改一下,使其更具可读性):

    这可以说是由于在C中发现了许多可移植性问题,Java希望避免使用不同宽度的整数(甚至是像two's completion、one's completion和sign/magnitude这样的编码),特别是因为它要在尽可能多的不同平台上运行。

    Inet4Address Inet6Address ,这取决于你的需要(和他们共同的祖先, InetAddress

        2
  •  9
  •   Joel Coehoorn    15 年前

    即使在64位计算机上,int也是32位的,您不需要做任何事情。

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

    int数据类型是一个32位有符号二的补码整数。它的最小值为-2147483648,最大值为2147483647(包括)。对于整数值,此数据类型通常是默认选择。这种数据类型很可能足够大,可以容纳程序使用的数字,但如果需要更大范围的值,请改用long。

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

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

    发件人: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#64bit_description

        3
  •  3
  •   Stephen C    15 年前

    int 键入。它在所有Java平台上都是32位的;请参见 JLS 4.2.1 .

    是的,内存使用已经被证明是一个问题

    好吧,如果你这么说的话。

    • 不是把IP地址保存在内存中,
    • 增加Java堆大小,或者
    • (如有必要)调整硬件或操作系统的大小。

    跟进

    Java没有无符号 内景

    (即使你做到了,也有办法做到。记住,如果你想从Java应用程序中挤出最后一点内存“浪费”,你需要做一些丑陋的事情。)

        4
  •  2
  •   pyCoder    15 年前

    int原语类型的java的固定大小为32位

        5
  •  1
  •   Community Mohan Dere    9 年前

    int java中的类型(与C++/C++不同)定义为32位,如所提到的 here

        6
  •  1
  •   thejh    15 年前

    int 每个平台32位。然而,要使它无符号,你必须手动移动数字和诸如此类的东西-它真的变得复杂。为什么不使用字节[]或长?

        7
  •  0
  •   vcsjones    15 年前

    Java中的“int”和“Integer”不依赖于平台。它总是32位的。依赖于平台的是com.sun.jna.ptr.IntByReference。

        8
  •  0
  •   Gintautas Miliauskas    15 年前

    http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html :

    int和long,其值为8位, 16位、32位和64位有符号 两个补体整数, 分别为和char,其值为 是16位无符号整数

    所以 int

        9
  •  0
  •   Slava Markeyev    15 年前

    在java中,int已经是32位的了。long是64位的。

    http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

        10
  •  0
  •   Nikhil Kumar    11 年前

    在java中,int是32位的。long是64位的。因此,如果是大于32位,你需要长。

        11
  •  -1
  •   Jevgenij Kononov    9 年前

    import java.lang.Object;
    import java.lang.Number;
    import java.lang.Integer;
    You should import these libraries, this will give you a new max values.