byte a = 1;
byte b = 2;
byte c = 3;
a = b + c;
為什麼最下面b,c變成int型了呢= =
byte 表示一個字節,他的表示范圍[-128 127],
byte a = 1;
byte b = 2;
byte c = 3;
都在這個范圍之內,沒有問題。
這裡還有一個問題 就是我們寫的整數,沒有明確指出類型(比如說 byte b = 2;中的2) 系統默認是int的,
那麼為什麼不會編譯出錯呢,這裡( 我認為 )這個整數如果沒有超出范圍(比如 byte b = 2;在范圍之內),編譯系統有個自動轉換。
那麼a = b + c; ;怎麼又會編譯出錯呢,而且 a,b都是byte型的,這裡java又有自己的一個機制,就是防止兩個小數相加超出自己所表示的范圍,把a ,b變成 int 在相加。相加後也是int 型(注意這裡的int 和 上面說的沒有指出類型的整數默認是int 有區別,這裡相當於你自己實際定義的了 例 int c=0; 系統不會在將這種明確規定數據類型的數做出自動轉換的。轉換也要自己強制類型轉換c=byte(a+b); 這樣看來好像更符合防止兩個數相加超出自己表示范圍的機制)。
c=a+2;和c= a + b;情況差不多。
byte c=1+2;這個就好理解了,編譯器是把 1+2 看作一個整體的 就是3了,3