Java中int和short的轉化


例子[1]

第一種情況:

short a = 1; a = a + 1; // 這一步會報錯 System.out.print(a); 

編譯器會報錯,原因如下:

-w600

第二種情況:

short a = 1; a += 1; System.out.print(a); 

這種情況不會報錯。
java語言規范中關於復合賦值的解釋是這樣的:E1 op= E2等價於
E1=(T)(E1 op E2),這里的T是E1的數據類型,即復合賦值是自帶了隱式的強制類型轉換的

第三種情況:

short a = 1; short b = 1; short c = a + b; 

這種情況依然會編譯出錯,因為Java中存在的類型升級,導致兩個short類型的運算也會轉換成int進行。

類型升級

在Java中,對基本數據類型做比較或者運算時,如果兩邊的數據類型不同,在可以比較的前提下會首先進行類型升級

  • 如果任一方為double,則另一方轉換為double
    • 否則如果任一方為float,則另一方轉換為float
      • 否則如果任一方為long,則另一方轉換為long
        • 否則兩邊都會轉換為int

即從高到低分別為doublefloatlongint
即使是兩個short類型運算,也會轉換成int進行,這就是前面第三種情況出現錯誤的原因。


    1. 參考https://blog.csdn.net/allenjay11/article/details/78613862 ↩︎


免責聲明!

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



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