基本型別與包裝類判斷是否相等問題

2021-10-04 17:41:49 字數 1644 閱讀 7409

題目**牛客網

題目:有如下4條語句:

integer i01=59;

int i02=59;

integer i03=integer.

valueof(59

);integer i04=

newinteger(59

);

以下輸出結果為false的是:

​ a.system.out.println(i01==i02);

​ b.system.out.println(i01==i03);

​ c.system.out.println(i03==i04);

​ d.system.out.println(i02==i04);

首先常量池這個概念,原來以為只要是乙個整型,都會放進到常量池,比如,0,1,12222222等。查詢後發現,byte,short,integer,long,character這5種整型的包裝類也只是在對應值小於等於127並且大於等於-128時才可使用常量池,因為他們至占用乙個位元組(-128~127);

再者integer.valueof方法中也有判斷,如果傳遞的整型變數》= -128並且小於127時會返回integercache類中乙個靜態陣列中的某乙個物件, 否則會返回乙個新的integer物件,**如下

public

static integer valueof

(int i)

所以如果你測試如下**:

public

static

void

main

(string[

] args)

結合自動封裝、常量池以及integer.valueof方法就不難得出,答案是true和false;

再看本題:

integer i01=59;

int i02=59;

integer i03=integer.

valueof(59

);integer i04=

newinteger(59

);

第一行:由於59在-128~127範圍之內,所以在自動裝箱的時候,會返回integercache[59 + (-128)];

第二行:基本資料型別與包裝類進行==操作時,包裝類會自動拆包裝,然後進行值比較

第三行:同第一行

第四行:因為有new關鍵字,所以在heap中開闢了一塊新記憶體放置值為59的integer物件。

system.out.

println

(i01==i02)

;//正確,i01物件會自動拆箱與i02進行比較

system.out.

println

(i01==i03)

;//正確,都指向integercache[59+(-128)]物件

system.out.

println

(i03==i04)

;//錯誤,引用指向的物件位址不同

system.out.

println

(i02==i04)

;//正確,i04物件會自動拆箱與i02進行比較

題目解析參考牛客

基本型別包裝類

一 概述 1 將基本資料型別封裝成物件的好處在於可以在物件中定義更多的功能方法操作該資料。2 常用的操作之一 用於基本資料型別與字串之間的轉換。3 基本型別和包裝類的對應 byte,short,integer,long,float,double character,boolean 二 integer...

基本型別包裝類

基本資料型別的包裝類可以使用基本型別對應的類的相關成員變數和成員方法,相比於基本資料型別,包裝類更易於使用。八大基本資料型別 byte short int long float double char boolean 對應的包裝類 byte short integer long float doub...

基本型別包裝類

基本型別和包裝類的對應 byte byte short short int integer long long float float double double char character boolean boolean integer類在物件中包裝了乙個基本型別int的值。integer型別的...