java-int數據的溢出


數據的溢出:

當整數的數據大小超出了可以表示的范圍,而程序中又沒有做數值范圍的檢查時,

這個整型變量所輸出的值將發生紊亂,且不是預期的運行結果。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM