天天看點

不要讓類型默默轉換

不要讓類型默默轉換
不要讓類型默默轉換

列印輸出:

詭異,dis2已經考慮到int類型可能越界的問題,并使用了long型,但還是出現了負值。

因為Java是先運算然後再進行類型轉換的,即是說運算的時候是以int類型運算,最後才将類型轉換成long類型,是以會發生越界的情況。

disc2的三個運算參數都是int類型,三者相乘的結果雖然也是int類型,但是已經超過 了int的最大值,是以其值就是負值了(為什麼是負值,因為過界了就會從頭開始),再轉換成long型,結果還是負值.

解決辦法,隻要加個"L"即可:

long dis2 = LIGHT_SPEED * 60L * 8;

這樣就徹底解決了越界問題,在實際開發中,更通用的做法是主動聲明式類型轉換(注意不是強制類型轉換),如:

long dis2 = 1L * LIGHT_SPEED * 60 * 8;

既然期望的結果是long類型,那就讓第一個參數與運算的參數也是long型。

注意:基本類型轉換時,使用主動聲明方式減少不必要的Bug。

本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/5424852.html,如需轉載請自行聯系原作者