public class IntegerTest {
public static long calcStartTime(long endTime, long minusMills) {
System.out.println("end : " + endTime + " minus mills : " + minusMills);
long startTime = endTime - minusMills;
System.out.println("start: " + startTime);
return startTime;
}
public static void main(String[] args) {
long nowTime = System.currentTimeMillis();
long a = 30 * 24 * 60 * 60 * 1000;
calcStartTime(nowTime, a);
}
}
打印结果如下:
end : 1560869539864 minus mills : -1702967296
start: 1562572507160
30 * 86400000 = 2592000000,但是计算出来却是:-1702967296。
在计算的过程中30 * 24 * 60 * 60 * 1000计算结果大于Integer.MAX_VALUE,所以出现了数据溢出,从而导致了计算结果不准确的问题。
所以在计算Long类型数据时,要加个“L”,避免数据溢出。正确写法是:
long a = 30 * 24 * 60 * 60 * 1000L;