char/byte/short類型的加法和類型轉換問題


原文鏈接:https://blog.csdn.net/LYRIC_315/article/details/47608063

首先看一下下列代碼


byte b1=1,b2=2;
b3=b1+b2;
final byte b4=4,b5=5;
b6=b4+b5;

問b3和b5能否正常賦值?

答案應該是:b3不能正常賦值,需要類型轉換,b3=(byte)(b1+b2);b6能夠正常賦值。

原因分析:

在Java中,在基本類型進行算術運算的時候,會發生小字節類型向大字節類型轉換的現象。對於short,byte,char 比int 字節數小的變量類型來說,運算結果會自動轉換為int類型。Java編譯器會在編譯期或者運行期將byte和short類型的數據帶符號擴展為相應的int類型數據,將boolean和char類型數據零位擴展為相應的int類型數據。因此,在處理boolean 、byte、short 和 char 類型的數組是,也會用相應的int類型的字節碼指令來處理。因此,大多數對於上述類型數據的操作,實際上都是使用相應的 int 類型作為運算類型。如下:


short a=1, b=2;
short c=a+b;
System.out.println(c);

在編譯時,會報出“Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from int to short”,可以看出可以看出a+b結果變成了int類型。

重點來了,如果是final 修飾的變量,進行運算的時候則不會出現類型轉換異常。


final short a=1, b=2;
short c=a+b;
System.out.println(c);

這么操作完全OK,究其原因,對於final 修飾的基本類型的變量來說,他們之間的運算直接就被硬編碼成了直接賦值語句,連中間結果都沒有了,類型轉換的異常也就沒了。


免責聲明!

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



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