为什么这个Java长期溢出?

时间:2015-04-16 22:43:04

标签: java long-integer integer-overflow

这很奇怪。

我写的一个类有以下数据成员:

final static long MAX_FILE_SIZE_BYTES = 50000000000L;

在我的代码中的某一点上运行以下块

System.out.println("MAXFILESIZEBYTES: " + MAX_FILE_SIZE_BYTES);

,输出为:

MAXFILESIZEBYTES: -1539607552

我的问题是,为什么这个长值溢出? Java应该是与机器无关的,并且long应该保持64位。是什么给了什么?

1 个答案:

答案 0 :(得分:4)

无法重现。

50000000000L是0x0000000BA43B7400。

-1539607552是FFFFFFFFA43B7400,如果将值转换为int.

,您将得到的结果

Ergo 某处你将它投射到int.也许你有一个阴影变量。