【Java踩坑記】——數據溢出

    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);
    }

在代碼種一定要注意這種隱形的數據類型造成的數據溢出的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章