數據溢出
當某一種類型的數值達到此類型能夠保存的最大(小)值之后,繼續擴大(縮小),就會出現數據溢出問題。
int x = Integer.MAX_VALUE; // 得到整型的最大值
System.out.println("x = "+x);
System.out.println("x+1 = "+(x+1));
System.out.println("x+2 = "+(x+2));
輸出結果:
x = 2147483647
x+1 = -2147483648
x+2 = -2147483647
當最大值加上 1 時,結果變成Integer范圍中最小的值,
當最大值加上 2 時,結果變成Integer范圍中第二小的值,這就發生了數據溢出。
若是想避免發生數據溢出,程序中就必須加上數值范圍的檢查,或者使用比Integer表示范圍更大的數據類型,如Long。
為了避免 int 類型的溢出,可以在表達式中的任一常量后加上大寫的 L,或是在變量前面加上 long,進行強制類型轉換。
// 當程序發生數據溢出之后,可用強制類型進行轉換
int x =Integer.MAX_VALUE ;
System.out.println("x = "+x);
System.out.println("x + 1 = "+(x+1));
System.out.println("x + 2 = "+(x+2L));
System.out.println("x + 3 = "+((long)x+3));
輸出結果:
x = 2147483647
x + 1 = -2147483648
x + 2 = 2147483649
x + 3 = 2147483650