【Java面試題】short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?

昨天去面試,雖然體驗不是很好, 但是看到了這個面試題,當時感覺無從下手,所以在這裏記錄一下。

解決這道題之前,先複習一下Java的基本數據類型轉換規則,以便後面對面試題的理解。

java的基本數據類型轉換

  • 自動類型轉換:小–>大 byte-->short-->int-->long-->float-->double

  • 強制類型轉換:大–>小 小類型 變量名 = (大類型) 值

    注意:自增/自減運算符、複合賦值運算符底層做了優化,內部自動強制類型轉換;

    如:++, --, +=, -=, ......

  • 類型提升:是指在多種不同數據類型的表達式中,類型會自動向範圍表達大的值的數據類型提升;

    long count = 1000000;
    int price = 1999;
    long totalPrice = price * count;
    

正文——面試題

1. short s1 = 1; s1 = s1 + 1;

錯誤!

根據java的基本數據類型轉換規則,s1爲short類型的變量,在表達式s1 = s1 + 1;中,s1會自動轉爲int類型與1進行運算,運算結果爲int類型,而int類型的值 賦值給short類型的變量時需要強制類型轉換。

2. short s1 = 1; s1 += 1;

正確!

在複合賦值運算符底層自動進行強制類型轉換,所以此處實際上是s1 = (int) s1 + 1;因爲此處有強制類型轉換,所以編譯可以通過。

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