先看下以下代碼和輸出
public static void main(String[] args) throws Exception{
Integer a=-128;
Integer aa=-128;
System.out.printf("a=aa? %s \n",a==aa);
Integer b=127;
Integer bb=127;
System.out.printf("b=bb? %s \n",b==bb);
Integer c=128;
Integer cc=128;
System.out.printf("c=cc? %s \n",c==cc);
Integer d=126;
Integer dd= new Integer(126);
System.out.printf("d=dd? %s \n",d==dd);
int e=12611;
Integer ee= new Integer(12611);
System.out.printf("e=ee? %s \n",e==ee);
int f=12611;
Integer ff= 12611;
System.out.printf("f=ff? %s \n",f==ff);
}
a=aa? true?
b=bb? true?
c=cc? false?
d=dd? false?
e=ee? true?
f=ff? true?
那么為什么會(huì)會(huì)出現(xiàn)這樣的結(jié)果呢?
這是因?yàn)?=只有在Java基本類型(short,int,long,byte,char,float,double,boolean)中比較的是值,其他類型中比較的是內(nèi)存地址。因此,InteGer類中==比較的是內(nèi)存地址,而不是值從而導(dǎo)致c和cc因?yàn)閮?nèi)存地址不相同導(dǎo)致c==cc不相同。
那為什么a=aa 和 b=bb 運(yùn)行起來(lái)又是ture呢?
這是因?yàn)镮nteger類在-128至127(默認(rèn))區(qū)間的Integer實(shí)例緩存到cache數(shù)組中,所以
a=aa 和 b=bb都是true
那為什么d=dd 運(yùn)行起來(lái)又是ture呢,他們都在-128和127之間???
這是因?yàn)閰^(qū)間的Integer實(shí)例緩存不包含new出來(lái)的對(duì)象
總結(jié)
Integer 和 int == 這樣判斷相等是可以的,文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-687449.html
而Integer 和?Integer 要判斷相等,推薦用equals (NULL值時(shí)也可以判斷)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-687449.html
到了這里,關(guān)于Integer、Long 等包裝類 == 值判斷、地址判斷與緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!