public static void main(String[] args) { final long a= 24 * 60 * 60 * 1000 * 1000; final long b= 24 * 60 * 60 * 1000; System.out.println(a/b); }
它应该返回1000,但是为什么返回5?
24 * 60 * 60 * 1000是86400000。如果你用它乘1000,它会溢出int类型(因为这的最大值int可容纳是2147483647比少了很多86400000000),你会得到500654080的a。
24 * 60 * 60 * 1000
86400000
1000
int
2147483647
86400000000
500654080
a
然后,将结果除以86400000,您将得到5。
5
为了解决此问题,您需要明确指定乘法的结果将是long-这是因为Java中的所有数字运算符都会产生整数,除非明确指示要产生其他数字类型。
long
只需L在一些操作数上附加a 就足够了:
L
final long a = 24 * 60 * 60 * 1000 * 1000L;