這要說到==和 equals 的區別了。
1. ==比較的是兩個對象在內存中的地址值(棧中的內容)。
2.equals 是 Java.lang.Object 類的一個方法。equals 比較的是兩個對象的內容(堆中的內容)。java 中所有的類都默認繼承于 Object,所以所有的類都有這個方法。
但是 Long 是一個對象,是對 long 的封裝。我們看一下 Long 對象的源碼,里面的 equals 方法是這么寫的:
1 public boolean equals(Object obj) { 2 if (obj instanceof Long) { 3 return value == ((Long)obj).longValue(); 4 } 5 return false; 6 }
所以兩個 Long 類型的變量進行比較的話,要么用 equals,要么先調用longValue 方法,拿到里面的 long 值之后再進行==比較。