为什么以下计算产生负值?
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)
| 归档时间: |
|
| 查看次数: |
3995 次 |
| 最近记录: |