Java中的乘法运算导致负值

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

long interval = 0;

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

回答:

正在评估其中的每个表达式(当然是在编译时;它是一个常量),int * int而不是long *

long。结果在某个时候溢出。因此,只需L使所有操作数文字变长即可:

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

当然,仅使 一些 操作数变长就可以逃脱,但是我倾向于发现仅更改所有内容会更容易。

综上所述,如果您要查找“ 30天的毫秒数”,最好使用:

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

以上是 Java中的乘法运算导致负值 的全部内容, 来源链接: utcz.com/qa/429258.html

回到顶部