在32位和64位机器中总是长64位

时间:2012-01-06 15:05:55

标签: java

我想知道x86和x64中的长度是否为64位?

5 个答案:

答案 0 :(得分:31)

是。任何JVM上的Java long都是64位,无一例外。所有Java基元类型都是完全可移植的,并且在所有实现中都具有固定的大小。

答案 1 :(得分:4)

是。 long称为64位整数。

答案 2 :(得分:4)

原始类型总是相同的大小。只有引用可以改变大小,但您通常不需要知道这一点。

您可以使用

获取参考的大小
int addressSize = Unsafe.addressSize();

注意:即使在64位JVM(最新的Java 6+ JVM)上,引用也是32位,但除非您使用32 GB或更大的堆。这是OpenJDK / Sun / Oracle JDK的默认设置,但是正如@ user988052所述,IBM JVM需要在命令行上设置相应的标志。其他JVM可能根本不支持此选项。

答案 3 :(得分:0)

从定义上可以,但是要注意使用 literal 声明的long:

final long num = 1000 * 1000 * 1000 * 3; // Looks fine, right ?
System.out.println("num=" + num);
Prints: num=-1294967296

因此,数字为负 ...由于溢出!!!

另请参阅此帖子(C#但类似):1000000000 * 3 = -1294967296?

解决方案:您必须在某处使用L来指定它是长时间的:

final long num = 1000 * 1000 * 1000 * 3L;
System.out.println("num=" + num);
Prints: num=3000000000

不好的是,只要数量足够小,这就不会引起问题,编译器不会抱怨...所以这会在运行时引起问题,具体取决于您的代码,您甚至可能不会注意到这些问题。 / p>

答案 4 :(得分:0)

是的,long在Java中还是64位,因为它与平台无关,但是在C ++中,如果计算机是32位还是64位,则其大小可能会有所不同。例如:int在64位计算机中的C ++中为32位,而在32位计算机中,其大小仅为16位。