Java每日兩題2020-3-19 小知識

在這裏插入圖片描述

如果不明就裏很容易認爲兩個輸出要麼都是true要麼都是false。首先需要注意的是f1、f2、f3、f4四個變量都是Integer對象引用,所以下面的==運算比較的不是值而是引用。裝箱的本質是什麼呢?當我們給一個Integer對象賦一個int值的時候,會調用Integer類的靜態方法valueOf

public static Integer valueOf(int i) {

    if (i >= IntegerCache.low && i <= IntegerCache.high)

        return IntegerCache.cache[i + (-IntegerCache.low)];

    return new Integer(i);

}

簡單的說,如果整型字面量的值在-128到127之間,那麼不會new新的Integer對象,而是直接引用常量池中的Integer對象,所以上面的面試題中f1f2的結果是true,而f3f4的結果是false。

在這裏插入圖片描述

題目二答案:

答:首先 Integer i = 1; 做了自動裝箱(使用 valueOf() 方法將 int 裝箱爲 Integer 類型),接着 i += 1; 先將 Integer 類型的 i 自動拆箱成 int(使用 intValue() 方法將 Integer 拆箱爲 int),完成加法運行之後的 i 再裝箱成 Integer 類型。

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