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)。 这称为整数溢出,结果溢出为负。
因为等式的值导致数字如此之大以至于它会缠绕它将导致整数。 诠释