本題是一個(gè)自動(dòng)拆裝箱的考題(自動(dòng)拆裝箱JDK需在1.5上),下面的討論都不針對(duì)新開(kāi)辟對(duì)象的情況:
1、基本型和基本型封裝型進(jìn)行“==”運(yùn)算符的比較,基本型封裝型將會(huì)自動(dòng)拆箱變?yōu)榛拘秃笤龠M(jìn)行比較,因此Integer(0)會(huì)自動(dòng)拆箱為int類型再進(jìn)行比較,顯然返回true;
2、兩個(gè)Integer類型進(jìn)行“==”比較,如果其值在-128至127,那么返回true,否則返回false, 這跟Integer.valueOf()的緩沖對(duì)象有關(guān),這里不進(jìn)行贅述。
3、兩個(gè)基本型的封裝型進(jìn)行equals()比較,首先equals()會(huì)比較類型,如果類型相同,則繼續(xù)比較值,如果值也相同,返回true
4、基本型封裝類型調(diào)用equals(),但是參數(shù)是基本類型,這時(shí)候,先會(huì)進(jìn)行自動(dòng)裝箱,基本型轉(zhuǎn)換為其封裝類型,再進(jìn)行3中的比較。
int a=257;
Integer b=257;
Integer c=257;
Integer b2=57;
Integer c2=57;
System.out.println(a==b);
//System.out.println(a.equals(b));? 編譯出錯(cuò),基本型不能調(diào)用equals()
System.out.println(b.equals(257.0));
System.out.println(b==c);
System.out.println(b2==c2);
因此上面的代碼的結(jié)果因此為 true, false, false, true