为什么这不会导致1000?

Rak*_*esh -3 java int numbers long-integer

可能重复:
Java问题 - 背后的原因和可能的输出是什么

long milli=24*60*60*1000;
long micro=24*60*60*1000*1000;
long result=micro/milli;
Run Code Online (Sandbox Code Playgroud)

结果应该是1000但不是.我使用时为什么会这样24*60*60*1000*1000L

有人能告诉我这个的原因吗?

and*_*dri 8

麻烦的是计算是在ints上进行然后再进行计算long,不幸的是24*60*60*1000*1000将不适合int和包装.你可以做点什么

long micro=24L*60*60*1000*1000;
Run Code Online (Sandbox Code Playgroud)

强制最后一次乘法在longs上完成.


And*_*s_D 6

很容易,如果你知道,但总是一个惊喜;)

文字1000是一个int值,因此多重操作使用整数而不是长整数.

long micro=24*60*60*1000*1000;
Run Code Online (Sandbox Code Playgroud)

被解释为

long micro = (long) ((int) 24*60*60*1000*1000);
Run Code Online (Sandbox Code Playgroud)

500654080不是86400000000

在表达式中至少使用一个长文字,这会强制整个计算在以下位置完成long:

long milli=24*60*60*1000;
long micro=24*60*60*1000*1000 * 1L; // forces a calculation in long
long result=micro/milli;
Run Code Online (Sandbox Code Playgroud)