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