标签:java 溢出
如下代码:
public class Example003 { public static void main(String[] args) { final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; final long MICROS_PER_DAY_L1 = 24 * 60 * 60 * 1000 * 1000L; final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; System.out.println("NO L Print:" + MICROS_PER_DAY / MILLIS_PER_DAY); //输出1 System.out.println("Has L Print:" +MICROS_PER_DAY_L1 / MILLIS_PER_DAY); //输出2 } }
输出结果:
NO L Print:5 Has L Print:1000
原因分析:
输出1和2的结果不一致的原因是计算溢出。由于MICROS_PER_DAY中所有乘起来的因子都是int,当两个int相乘时得到的结果也是int,所以MICROS_PER_DAY的计算结果是int,计算完成后(溢出)再赋值给long类型的MICROS_PER_DAY,MICROS_PER_DAY获取的是一个溢出后部分值;MICROS_PER_DAY_L1被当做一个long类型计算,计算的结果也是long,不产生溢出。所以,在操作大数字时,一定是注意溢出问题。一般在计算时,就使用long来执行。也就是在计算的因子中显式地标准数字类型。
本文出自 “winger” 博客,谢绝转载!
标签:java 溢出
原文地址:http://imu2008.blog.51cto.com/3844842/1590791