數據的溢出:
當整數的數據大小超出了可以表示的范圍,而程序中又沒有做數值范圍的檢查時,
這個整型變量所輸出的值將發生紊亂,且不是預期的運行結果。
01 // 整數值如果超出了自己所可以表示范圍的最大值,會出現溢出
02 public class TestJava3_4
03 {
04 public static void main(String args[])
05 {
06 int x = Java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
int y=2147483647 ;//int類型的最大值
07
08 System.out.println("x = "+x);
09 System.out.println("x+1 = "+(x+1));
10 System.out.println("x+2 = "+(x+2));
11 }
12 }
輸出結果:
x = 2147483647
x+1 = -2147483648
x+2 = -2147483647
當最大值加上 1 時,結果反而變成表示范圍中最小的值;當最大值加上 2 時,結
果變成表示范圍中次小的值,這就是數據類型的溢出。讀者可以發現,這個情形會出
現一個循環,若是想避免這種情況的發生,在程序中就必須加上數值范圍的檢查功能,
或者使用較大的表示范圍的數據類型,如長整型。
就像計數器的內容到最大值時會自動歸零一樣。而在整數中最小值為
-2147483648,所以當整數 x 的值最大時,加上 1 就會變成最小值-2147483648,也就
是產生了溢出。
為了避免 int 類型的溢出,可以在該表達式中的任一常量后加上大寫的“L”,或
是在變量前面加上 long,作為強制類型的轉換。
范例:TestJava3_5.java
01 // 下面的這段程序當整型發生溢出之后,用強制類型進行轉換
02 public class TestJava3_5
03 {
04 public static void main(String args[])
05 {
06 int x = java.lang.Integer.MAX_VALUE ;
06
08 System.out.println("x = "+x);
09 System.out.println("x + 1 = "+(x+1));
10 System.out.println("x + 2 = "+(x+2L));
11 System.out.println("x + 3 = "+((long)x+3));
12 }
13 }
輸出結果:
x = 2147483647
x + 1 = -2147483648
x + 2 = 2147483649
x + 3 = 2147483650