public static void main(String[] args)
{
long t1 = System.currentTimeMillis();
long t2 = t1 - 7 * 24 * 60 * 60 * 1000;
long t3 = t1 - 30 * 24 * 60 * 60 * 1000;
System.out.println(t3 > t2);
}
上述代碼本身是在項目中,計算N天前的時間。
表面上看起來這樣計算時間好像並沒有什麼問題,而且在N的值較小的時候。問題也並沒有暴露出來。
我們可以看到,上述代碼種我們期待的輸出應該是false ,但是實際的輸出卻是true。
仔細思考下就會發現問題,我們的int型的數據範圍是-2147483648 ~ 2147483647 ,而如果計算三十天的數據明顯會超出次數據的範圍,此時數據會溢出,導致數據丟失。
public static void main(String[] args)
{
long t1 = System.currentTimeMillis();
long t2 = t1 - 7 * 24 * 60 * 60 * 1000L;
long t3 = t1 - 30 * 24 * 60 * 60 * 1000L;
System.out.println(t3 > t2);
}
在代碼種一定要注意這種隱形的數據類型造成的數據溢出的問題。