1.先看以下代碼
public classMain {
? ? ?public static void main(String[] args) {
? ? ?byte a =4;
? ? ?byte b =6;
? ? ?byte c = a + b;
}
}
以上代碼在編譯過(guò)程中就會(huì)報(bào)錯(cuò)。
2.分析:
為什么byte a = 4;就不會(huì)報(bào)錯(cuò)?
因?yàn)閎yte是一個(gè)字節(jié),八個(gè)二進(jìn)制位,此時(shí)其范圍為-128 ~ +127,所以4在其范圍內(nèi),所以可以被賦值。一旦這個(gè)數(shù)值超過(guò)了127,那么編譯就會(huì)報(bào)錯(cuò)了。
為什么byte c = a + b;就報(bào)錯(cuò)呢?
這是java的機(jī)制導(dǎo)致的,java在對(duì)byte這種類型進(jìn)行“運(yùn)算”時(shí),會(huì)將其轉(zhuǎn)換為int類型,兩個(gè)int類型相加,賦值給byte類型肯定會(huì)報(bào)錯(cuò)的。
為什么byte = 3 + 4;又不會(huì)報(bào)錯(cuò)呢?
跟第一個(gè)一樣,3+4是常量的計(jì)算,會(huì)優(yōu)先執(zhí)行,執(zhí)行結(jié)果再賦值給byte,此時(shí)判斷數(shù)值是否滿足該類型范圍,滿足就直接賦值了。
3.總結(jié)
兩個(gè)變量相加,先對(duì)類型進(jìn)行提升,然后運(yùn)算,再將運(yùn)算結(jié)果賦值。
兩個(gè)常量相加,先計(jì)算常量數(shù)值,然后判斷是否滿足類型范圍,再賦值。