首先看个例子:
就是在第一个计算值将它转为long类型
package com.lkt.jh;
public class LongDivision {
public static void main(String[] args) {
final long MICROS_PER_DAY=24*60*60*1000*1000;
final long MILLIS_PER_DAY=24*60*60*1000;
System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
}
}
它会打印什么呢,按照我们的思维,应该是应该打印1000,但是现实却是打印 5
问题在于常数MICROS_PER_DAY的计算确实溢出了。因为这个计算完全是以int运算来执行的,并且只有在运算完成后,其结果才被提升为long,而此时已经太迟了:计算溢出了。它返回的是一个小了200倍的数值。
解决办法很简单
package com.lkt.jh;
public class LongDivision {
public static void main(String[] args) {
final long MICROS_PER_DAY=24L*60*60*1000*1000;
final long MILLIS_PER_DAY=24L*60*60*1000;
System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
}
}
就是在第一个计算值将它转为long类型
当在操作很大的数字时,千万要提防溢出--它可是一个缄默杀手