</pre><pre name="code" class="java"><pre name="code" class="java">public class Client {
// 光速是30萬公里/秒,常量
public static final int LIGHT_SPEED = 30 * 10000 * 1000;
public static void main(String[] args) {
long dis1 = LIGHT_SPEED * 1;
System.out.println("光速1s:" + dis1 + "米");
long dis2 = LIGHT_SPEED * 60 * 8;
System.out.println("光速8分鐘:" + dis2 + "米");
}
}
打印結果:
光速1s:300000000米
光速8分鐘:-2028888064米
詭異,dis2已經考慮到int類型可能越界的問題,並使用了long型,但還是出現了負值。
因爲Java是先運算然後再進行類型轉換的,即是說運算的時候是以int類型運算,最後纔將類型轉換成long類型,所以會發生越界的情況。
解決辦法,只要加個"L"即可:
long dis2 = LIGHT_SPEED * 60L * 8;
這樣就徹底解決了越界問題,在實際開發中,更通用的做法是主動聲明式類型轉換(注意不是強制類型轉換),如:
long dis2 = 1L * LIGHT_SPEED * 60 * 8;
既然期望的結果是long類型,那就讓第一個參數與運算的參數也是long型。
注意:基本類型轉換時,使用主動聲明方式減少不必要的Bug。