代碼
先來看一個例子:
public class MyTest {
public static void main(String[] args) throws IOException {
Integer v1 = 12;
Integer v2 = 12;
System.out.println(v1 == v2);
Integer v3 = 500;
Integer v4 = 500;
System.out.println(v3 == v4);
}
}
都是對兩個數值進行比較,得到的結果會是一樣的嗎?看下打印的結果:
true
false
Process finished with exit code 0
結果有點出乎意外,都是比較兩個值,得到的結果確實不一樣的。
原因分析
這裏引用阿里巴巴規範手冊的一段說明
【強制】所有的相同類型的包裝類對象之間值的比較,全部使用 equals 方法比較。
說明:對於 Integer var=?在-128 至 127 之間的賦值,Integer 對象是在 IntegerCache.cache產生,會複用已有對象,這個區間內的 Integer 值可以直接使用==進行判斷,但是這個區間之外的所有數據,都會在堆上產生,並不會複用已有對象,這是一個大坑,推薦使用 equals 方法進行判斷。
可見這個確實是一個大坑,所以手冊中強制使用equals進行判斷。