關於數值比較使用equals()方法的誤區
阿新 • • 發佈:2018-12-25
理解:1:只有物件資料型別(Long、String)等才有equals()方法,重寫了Object()裡面的equals()方法
public boolean equals(Object obj) { return (this == obj); }
下面是Long裡面的equals()方法:
public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; } 下面是String裡面的equals()方法:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
由此可見,每個物件資料型別重寫equals()方法之後,實現細節都是不一樣的,而long型equals()其他型別,如果這個型別不是long型,那麼總是返回false,只有Long.equal(Long.type)才可能會返回值