Java中的乘法运算导致负值

Ali*_*Ali 11 java

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

long interval = 0;

interval = ((60000 * 60) * 24) * 30;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 39

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

interval = ((60000L * 60L) * 24L) * 30L;
Run Code Online (Sandbox Code Playgroud)

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

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

long interval = TimeUnit.DAYS.toMillis(30);
Run Code Online (Sandbox Code Playgroud)