1.先看以下代碼
public classMain {
? ? ?public static void main(String[] args) {
? ? ?byte a =4;
? ? ?byte b =6;
? ? ?byte c = a + b;
}
}
以上代碼在編譯過程中就會報錯鳞陨。
2.分析:
為什么byte a = 4;就不會報錯鹿鳖?
因為byte是一個字節(jié)樱蛤,八個二進制位,此時其范圍為-128 ~ +127扛邑,所以4在其范圍內(nèi)怜浅,所以可以被賦值。一旦這個數(shù)值超過了127蔬崩,那么編譯就會報錯了恶座。
為什么byte c = a + b;就報錯呢?
這是java的機制導致的舱殿,java在對byte這種類型進行“運算”時奥裸,會將其轉(zhuǎn)換為int類型,兩個int類型相加沪袭,賦值給byte類型肯定會報錯的。
為什么byte = 3 + 4樟氢;又不會報錯呢冈绊?
跟第一個一樣,3+4是常量的計算埠啃,會優(yōu)先執(zhí)行死宣,執(zhí)行結果再賦值給byte,此時判斷數(shù)值是否滿足該類型范圍碴开,滿足就直接賦值了毅该。
3.總結
兩個變量相加,先對類型進行提升潦牛,然后運算眶掌,再將運算結果賦值。
兩個常量相加巴碗,先計算常量數(shù)值朴爬,然后判斷是否滿足類型范圍,再賦值橡淆。