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); 

试试这个,它不会是负面的:

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

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

因为等式的值导致数字如此之大以至于它会缠绕它将导致整数。 诠释