今天寫程序碰到一個非常有趣的問題,兩個值都爲15比較後居然不相等。記錄如下:
1.第一種情況:
Integer a = 15;
Integer b = 15;
System.out.println(a==b);
結果爲true;
2.第二種情況:
下面看下面種情況:
Integer a = new Integer(15);
Integer b = 5;//這裏b=new Integer(15);結果同樣爲false
System.out.println(a==b);
結果爲false。
2.第三種情況:
Integer a = 129;
Integer b = 129;
System.out.println(a == b);
結果爲false,那這種情況與第一種有什麼區別了,唯一的區別就是 129大於15.對於Integer類型來說,值在-128-127,用==比較是一致的,超過這個區間就不行了。那麼第二種情況爲什麼爲false了,原來Integer b = 5,在此涉及了裝箱過程,即爲Integer b = Integer.valueOf(5),所以就不等了。
我們可以看下面中情況:
Integer a = Integer.valueOf(5);
Integer b = 5;
System.out.println(a==b);
這種情況爲true,就驗證了上面的解釋。
所以以後比較對象就最好用equals,或者全部使用valueOf();