作為一個被問的很多的一個面試題:java中==和equals有什么區別?
網上普遍的回答都是:==比較的是內存地址,equals比較的是值。
其實這種回答是很不標准的,稍微標准一點的回答應該JDK自帶的一些類對equals的實現各不同,例如
Object對象的equals的定義是這樣的:
public boolean equals(Object obj) { return (this == obj); }
所以在Object中==和equals是沒有任何區別的。
但在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; }
Long對象的equals的定義:
public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; }