1 public static void main(String[] args) { 2 Integer limitDay = 1; 3 long dayMillisecond = 1*24*60*60*1000*24*100; 4 System.out.println(dayMillisecond);//输出 1201569792 5 long longSecond= limitDay.longValue()*24*60*60*1000*24*100; 6 System.out.println(longSecond);// 输出 207360000000 7 8 }
由上面的输出结果,初看好像毁三观,但细细想还是能寻到缘由的。需要确认的是 上述代码第三行中的 dayMillisecond 虽然是用long来接收的,但其值却是不会超过int的取值范围的,因为等号右边都是int 与int之间的计算,最终的结果也是int,而第五行是int 与long之间的计算,最终的结果当然是long了。那么为什么结果相差100倍呢?大家都知道int 的存值返回约为 -21亿到21亿,由上面的计算字面量可知 大概是2000多亿,int在多次数据的溢出得到的结果正好是1201569792,这也就解释上面的输出结果。
有时候我们写程序时,特别是线上程序往往bug就是由于一个小点引起的,上面的问题也曾引得我花大量的时间的改bug,这种问题往往是想不到的,因为自己有意识的忽略它们,觉得问题不应该会出现在这段代码,总之一定要重视基础,不要好高骛远。