java的奇怪行为

lik*_*eIT 2 java

你好我对java有一些疑问,为什么以下代码返回奇怪的值?

System.out.println("Strange " + (20 * 232792560)/20);
Run Code Online (Sandbox Code Playgroud)

我为什么收到18044195

Oli*_*rth 5

因为(20 * 232792560)溢出了一个范围int,并且绕数次范围变成了几次360883904.然后将其除以20给出您看到的结果.

如果您想要正确的结果,那么您需要:

System.out.println("Strange " + (20 * 232792560L) / 20);
Run Code Online (Sandbox Code Playgroud)

(标记一个文字,L意味着常数将用long,而不是用int,所以这将不再溢出.)