java的奇怪行为

时间:2011-05-07 13:45:18

标签: java

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

System.out.println("Strange " + (20 * 232792560)/20);

为什么我会收到18044195

3 个答案:

答案 0 :(得分:5)

因为(20 * 232792560)溢出了int的范围,并且在数字范围内多次换行成为360883904。然后将其除以20,以便为您提供结果。

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

System.out.println("Strange " + (20 * 232792560L) / 20);

(使用L标记文字意味着常数数学将使用long,而不是int,因此不会再溢出。)

答案 1 :(得分:1)

因为(20 * 232792560)将执行基于整数的乘法,结果明显超出int的范围,因此该值将被截断。

答案 2 :(得分:0)

因为20 * 232792560不适合4个字节(整数值)。

所以你得到了:

20 * 232792560 = 360883904; // because of int overflow
360883904 / 20 = 18044195;