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