今天在編程中遇到這個問題:
我們都知道byte類型的取值範圍是-128—127,如果我在代碼中定義一個byte類型的變量a,並且給他賦值127,及byte a = 127。我再定義一個byte b = a + 1;很顯然它的值會超出byte的取值範圍,而它會變成-128,(任何整型類型的最大值+1,結果返回該類型的最小值。)
但是我們編程時這樣定義,編譯器會報錯,而int類型則不會。
public class text1 {
public static void main(String[] args) {
// byte b = 127;
// byte c = b + 1; //這個地方會報錯
// short a = 32767;
// short e = a + 1;
int A = Integer.MAX_VALUE;
int B = A + 1;
long C = Long.MAX_VALUE;
long D = C + 1;
// System.out.println(c);
// System.out.println(e);
System.out.println(B);
System.out.println(D);
}
}
出現這種情況的原因是:
Java虛擬機在進行整形變量運算時會先把計算出來的結果存在一個臨時變量中,這個臨時變量的類型爲int類型,所以我們進行byte b = a + 1,時編譯器會報錯,因爲我們沒法把int類型的值直接轉換爲byte類型,必須進行強制轉換:byte b = (byte)(a + 1);而int,long類型轉換屬於向上轉型是自動進行的,所以編譯器不會報錯。