1. 程式人生 > >int型別和byte型別的強制型別轉換

int型別和byte型別的強制型別轉換

OKevin

GitBook:《探尋Java中的設計模式》
Mail:[email protected]

隨筆 - 130  文章 - 0  評論 - 83

int型別和byte型別的強制型別轉換

今天在讀《Java網路程式設計》這本書的第二章 流 時,看到書中有一個地方關於int強制轉換為byte型別時應注意的地方。這個地方有點細節,不過就應該把這種細節把握住。

情況是這樣的,講到InputStream的抽象方法read時,說到read返回一個int型,但實際是一個byte型的資料。這點從API也能考證。如圖:

那麼問題來了,int佔4個位元組,byte佔1個位元組,我們迴圈讀取的時候將int型陣列強制型別轉換成byte時,會發生什麼情況呢?程式碼如下:

1個位元組佔8位,既然實際返回的是byte型別的資料,那麼強制型別轉換int型擷取低8位,對資料也不會造成影響。問題就出現在,如果再從byte型轉換成int型呢?程式碼如下:

此時,j輸出為-106。

這是因為在int強制轉換為byte型資料時,會產生一個-128~127的有符號位元組,而不是read方法返回的0~255的無符號位元組。這個時候要注意程式碼應修改為:

一個小問題,重在積累。