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的無符號字節。這個時候要注意代碼應修改為:

一個小問題,重在積累。

 

這是一個能給程序員加buff的公眾號 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM