采用 JDK 1.6_13版本,发现一个奇怪的问题。
执行,输出结果非常可怕。
JDK 1.6 输出结果:
JDK 1.5 输出结果:
难道是Java的BUG吗?我很难相信,Java在处理这么简单的事情,居然会有BUG。
我将以上测试代码,稍微调整之后,如下
JDK1.6输出如下结果:
JDK1.5输出如下结果:
调整后,Java的处理结果完全正确。
再次调整代码,如下:
输出:
输出结果正确。
总结如下:
Java在处理连续乘法或除法时,最好注明数字的类型,否则可能会得到不正确的结果。
long period =30* 24 * 60 * 60 * 1000;
System.out.println("30 * 24 * 60 * 60 * 1000="+period);
执行,输出结果非常可怕。
JDK 1.6 输出结果:
30 * 24 * 60 * 60 * 1000=-1702967296
JDK 1.5 输出结果:
30 * 24 * 60 * 60 * 1000=-1702967296
难道是Java的BUG吗?我很难相信,Java在处理这么简单的事情,居然会有BUG。
我将以上测试代码,稍微调整之后,如下
long period = 24 * 60 * 60 * 1000;
System.out.println("24 * 60 * 60 * 1000=" + period);
period *= 30;
System.out.println("30 * 24 * 60 * 60 * 1000=" + period);
JDK1.6输出如下结果:
24 * 60 * 60 * 1000=86400000
30 * 24 * 60 * 60 * 1000=2592000000
JDK1.5输出如下结果:
24 * 60 * 60 * 1000=86400000
30 * 24 * 60 * 60 * 1000=2592000000
调整后,Java的处理结果完全正确。
再次调整代码,如下:
long period = 30l * 24 * 60 * 60 * 1000;
System.out.println("30l * 24 * 60 * 60 * 1000=" + period);
输出:
30l * 24 * 60 * 60 * 1000=2592000000
输出结果正确。
总结如下:
Java在处理连续乘法或除法时,最好注明数字的类型,否则可能会得到不正确的结果。