我想知道x86和x64中的长度是否为64位?
答案 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位。