昨天去面試,雖然體驗不是很好, 但是看到了這個面試題,當時感覺無從下手,所以在這裏記錄一下。
解決這道題之前,先複習一下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;
因爲此處有強制類型轉換,所以編譯可以通過。