1.在java中基礎數(shù)據(jù)類型int,long,float,double...等等對應的包裝類為Integer,Long,Float,Double...
在對數(shù)據(jù)進行比較的時候如
int a = 1000;int b=1000;
if( a == b){
return true
}else{
return false
}
我們都知道程序運行的結果是true;
2.但是包裝類情況就不一樣了
先來一段代碼窘哈,直接上圖
我們拿Integer做示范
可以看到a1和a2同樣是100 比較兩個值時得到了正確的結果膀捷,但是b1和b2的值雖然都相同但是比較的結果時false
為什么會出現(xiàn)這種情況呢够傍?
我們先要明白一件事,包裝類的對象是對象悦析,對象用==比較的是對象的地址
Integer b1 = 1000; 其實b1 是一個對象,是java自動把1000包裝成Integer對象(new Integer(1000))并賦值給b1
同理b2也是一個對象,此時使用==筐咧,那么比較的是b1和b2的對象地址,當然為false啦噪矛;
那么為什么100又能使用==比較呢量蕊?
原來包裝類型Integer在內部會對較小的數(shù)值進行緩存(-128 ~ 127),然后其他的Integer對象若是拿-128 ~ 127的值是直接從緩存拿的,我摘取一段Integer類的源碼
很明顯此時的a1 和 a2都是IntegerCache中的同一個緩存艇挨,所以可以直接用==比較
3.如何正確使用方式
其實也很簡單
我們可以使用Integer類的intValue()獲取值后進行比較
b1.intValue() == b2.intValue()
或者使用equals()方法残炮,Integer對equals進行了重寫,源碼是這樣的
b1.equals(b2);