第二章:簡單 Java 程式解析
第三章:變數與資料型態
第四章:運算子、運算式與敘述
第五章:選擇性敘述與迴圈
第十章:實例變數與函數、類別變數與函數
Powered By GitBook
溢位

一、介紹

Java 提供 long、int、short 及 byte 四種型態最大最小值代碼; 要使用某個型態的代碼,必須先指定該型態所在的類別庫以及該型態所屬的類別;
以下為長整數最大值的代碼示範:
java.lang 類別庫太常使用,所以預設會將它載入,可以直接省略
long
int
所屬類別
java.lang.Long
java.lang.Integer
最大值代碼
MAX_VALUE
MAX_VALUE
最大值
9223372036854775807
2147483647
最小值代碼
MIN_VALUE
MIN_VALUE
最小值
-9223372036854775808
-2147483648
shore
byte
所屬類別
java.lang.Short
java.lang.Byte
最大值代碼
MAX_VALUE
MAX_VALUE
最大值
32767
127
最小值代碼
MIN_VALUE
MIN_VALUE
最小值
-32768
-128

二、程式實作

以下範例:分別宣告包含java.lang 與省略,編譯看看結果是否正確。

1. 輸出最大值與最小值

1
package ch03;
2
3
public class ch03_2 {
4
5
public static void main(String[] args) {
6
long lmax=java.lang.Long.MAX_VALUE;
7
int imax=java.lang.Integer.MAX_VALUE;
8
short smax=Short.MAX_VALUE;
9
byte bmax=Byte.MAX_VALUE;
10
11
System.out.println("Max value of long : "+lmax);
12
System.out.println("Max value of int : "+imax);
13
System.out.println("Max value of short : "+smax);
14
System.out.println("Max value of byte : "+bmax);
15
16
//以上為最大值
17
18
long lmin=java.lang.Long.MIN_VALUE;
19
int imin=java.lang.Integer.MIN_VALUE;
20
short smin=Short.MIN_VALUE;
21
byte bmin=Byte.MIN_VALUE;
22
23
System.out.println("Min value of long : "+lmin);
24
System.out.println("Min value of int : "+imin);
25
System.out.println("Min value of short : "+smin);
26
System.out.println("Min value of byte : "+bmin);
27
28
//以上為最小值
29
}
30
31
}
Copied!
OUTPUT

2. 當輸出值溢位

以下透過上方介紹過的最大值做溢位的示範:
1
public class ch03_3 {
2
3
public static void main(String[] args) {
4
int i=Integer.MAX_VALUE; //在此將i設為整數最大值
5
int sum;
6
7
System.out.println("i= "+i); //先印出i 值
8
9
sum=i+1;
10
System.out.println("i+1= "+sum); //印出 i+1 的值
11
12
sum=i+2;
13
System.out.println("i+2= "+sum); //印出 i+2 的值
14
}
15
16
}
Copied!
OUTPUT: i= 2147483647 i+1= -2147483648 i+2= -2147483647
溢位發生:
當整數的大小超過可以表示的範圍,而程式又沒有做數值範圍的檢查時,這個整數所輸出的值將發生紊亂,且不是預期中的執行結果,稱為「溢位」(overflow)。
解決方法:加上數值範圍的檢查功能,或使用更大的表示範圍之資料型態。

3. 解決溢位發生

1
package ch03;
2
3
public class ch03_3_2 {
4
5
public static void main(String[] args) {
6
int i=Integer.MAX_VALUE; //將i設為整數最大值
7
8
System.out.println("i= "+i); // 印出i 值
9
10
System.out.println("i+1= "+(i+1)); // 會發生溢位
11
12
System.out.println("i+2= "+(i+2L)); //加上大寫L 強制型態轉換
13
System.out.println("i+3= "+((long)i+3)); // 強制轉換成長整數型態
14
15
}
16
17
}
Copied!
OUTPUT: i= 2147483647 i+1= -2147483648 //發生溢位 i+2= 2147483649 //無溢位 i+3= 2147483650 //無溢位
Last modified 1yr ago