Java中的乘法运算导致负值

时间:2011-06-13 15:19:28

标签: java

为什么以下计算产生负值?

long interval = 0;

interval = ((60000 * 60) * 24) * 30;

4 个答案:

答案 0 :(得分:36)

其中的每个表达式都被评估(在编译时,当然;它是常量),而不是int * int而不是long * long。结果在某些时候溢出。因此,只需使用L使所有操作数文字变长:

interval = ((60000L * 60L) * 24L) * 30L;

当然,你只能让一些的操作数很长,但我倾向于发现更改一切更容易。

说完所有这些,如果你正在寻找“30天毫秒”,那么最好使用:

long interval = TimeUnit.DAYS.toMillis(30);

答案 1 :(得分:3)

试试这个,它不会是否定的:

long interval = 0;

interval = ((60000L * 60L) * 24L) * 30L;

答案 2 :(得分:2)

因为等式的值导致数字如此之大以至于它包裹它将导致整数。 Int

答案 3 :(得分:2)

您的值为2592000000,大于最大有符号整数值2 ^ 31(2147483648)。这称为整数溢出,结果溢出为负。