java表達式類型自動提升

【一道經典的Java面試題】 

    short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

    答案是:前者錯,後者對。相信不管是否經歷過java面試過,大家一定對這道題很熟悉。因爲這道題確實太經典了,以至於成爲了基本每個老師都會拿出來,當作課堂例題來講。要說清這道題,首先看看java表達式類型轉換規則。

【java表達式類型轉換】

    java是一門強類型語言,不僅每個變量具有指定的數據類型,它的表達式也有指定的數據類型。因此在不同類型之間進行賦值操作很容易遇到到類型轉換的問題。

    在JAVA表達式中,如果進行運算的幾個變量類型不一致,JAVA表達式會採取類型自動提升的操作。Java定義如下的自動提升規則:

1. 所有byte型、short型和char型將被提升到int型。
2. 整個算術表達式的數據類型自動提升到與表達式中最高等級操作數同樣的類型。操作數的等級排列如下圖所示,位於箭頭右邊類型的等級高於位於箭頭左邊類型的等級。以下是java表達式中類型提升等級。

wKioL1PiIKrxiYi_AAC7CNAEZZM306.jpg

【複合賦值運算符包含的隱式類型轉換】

     short s1 = 1; s1 = s1 + 1會引起編譯錯誤,s1+1表達式類型會自動提升爲int類型,而s1的聲明類型爲short類型,所以將一個int類型的值賦給short類型將引起編譯錯誤。

    short s1 = 1; s1 += 1;不會出錯,因爲表達式中使用了+=複合賦值運算符,複合賦值運算符包含了一個隱式的類型轉換。s1 = s1 + 1s1 += 1實際上並不等價。s1+=1實際上等於s1 = (s1的類型)s1+1,複合賦值運算符會自動將他計算的結果值強制類型轉換爲其左邊變量的類型。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章