JAVA中關於Integer常見的面試問題

一.int與Integer的區別

辰兮同學要努力


二.面試案例

仔細思考輸出值以及爲什麼?
在這裏插入圖片描述


(1)題一在這裏插入圖片描述


非new生成的Integer變量和new Integer()生成的變量比較時,結果爲false。(因爲非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內存中的地址不同)

(2)題二

在這裏插入圖片描述
因爲==比較的是內存地址,所以兩個通過new生成的Integer變量永遠是不相等的(因爲new生成的是兩個對象,其內存地址不同)


(3)題三

在這裏插入圖片描述
因爲包裝類Integer和基本數據類型int比較時,java會自動拆包裝爲int,然後進行比較,實際上就變爲兩個int變量的比較


(4)題四

在這裏插入圖片描述
對於兩個非new生成的Integer對象,進行比較時,如果兩個變量的值在區間-128到127之間,則比較結果爲true,如果兩個變量的值不在此區間,則比較結果爲false

上述例4原因:
java在編譯Integer i = 100 ;時,會翻譯成爲Integer i = Integer.valueOf(100)。而java API中對Integer類型的valueOf的定義如下,對於-128到127之間的數,會進行緩存,Integer i = 127時,會將127進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了

在這裏插入圖片描述


總結:注意==比較的是地址值,觀察對象是否new是出來的,如果是兩個非new出來的Integer值,則觀察其是否在-128~127這個範圍內!!


Thank you for looking so good and paying attention to me ~

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