的equals
方法比較兩個對象的值是否相等或不equals()方法的工作。我的問題是如何比較這兩個對象?它怎麼能說這兩個物體是平等的?我想知道什麼它比較兩個對象。我不包括hashCode
方法。如何在Java中
如何在Java中
回答
默認實現,類java.lang.Object
的一個,只需測試參考是相同的對象:
150 public boolean equals(Object obj) {
151 return (this == obj);
152 }
基準相等運算符在Java Specification這樣描述:
在運行時,如果操作數的值都爲空 或兩者指代相同的對象或數組==的結果爲真實的;否則,結果 是錯誤的。
這種默認行爲通常不是語義上的滿足。例如使用==
無法測試大整數情況下的平等:
Integer a = new Integer(1000);
Integer b = new Integer(1000);
System.out.println(a==b); // prints false
這就是爲什麼該方法被重寫:
722 public boolean equals(Object obj) {
723 if (obj instanceof Integer) {
724 return value == ((Integer)obj).intValue();
725 }
726 return false;
727 }
這使得這樣的:
System.out.println(a.equals(b)); // prints true
類重寫默認行爲應該基於識別字段(通常是所有字段)的等同性來測試語義平等。
你似乎知道,你應該相應地覆蓋hashCode
方法。
考慮下面的例子,
public class Employee {
String name;
String passportNumber;
String socialSecurityNumber;
public static void main(String[] args) {
Employee e1 = new Employee();
Employee e2 = new Employee();
boolean isEqual = e1.equals(e2); // 1
System.out.println(isEqual);
}
}
在在註釋// 1中的代碼,它調用繼承其簡單地比較的e1
和e2
引用對象類equals
方法。因此,對於使用new
關鍵字創建的每個對象,它始終會給出false
。
以下是從對象
public boolean equals(Object obj) {
return (this == obj);
}
爲了比較平等檢查JLS給equals
方法在我們的類要覆蓋的方法摘錄。這不是最終的方法。 JLS不知道程序設計師希望兩個對象相等的原因。所以他們給了非最終的方法來覆蓋。
hashcode
不起作用檢查對象的平等。 hashcode
檢查/找到Bucket的哪個對象可用。我們使用hashcode
在哈希技術,它被某些類,如HashMap中..
如果兩個對象的hashCode是平等的,做不意味着兩個對象是相等的。
對於兩個對象,如果equals
方法返回true,則hashcode必須相同。
你將不得不重寫equals
方法來決定你想要對象上面的代碼e1
和e2
等於其基礎。它是基於passportNumber
還是socialSecurityNumber
或者passportNumber+socialSecurityNumber
的組合?
I want to know based on what it compares the two objects.
的回答是,在默認情況下繼承Object
類的equals
方法的幫助下它使用==符號比較兩個對象的引用相等。代碼在上面給出。
- 1. 如何在Java中
- 2. 如何在Java中
- 3. 如何在Java中
- 4. 如何在Java中
- 5. 如何在Java中
- 6. 如何在Java中
- 7. 如何在Java中
- 8. 如何在Java中
- 9. 如何在Java中
- 10. 如何在Java中
- 11. 如何在Java中
- 12. 如何在Java中
- 13. 如何在Java中
- 14. 如何在Java中
- 15. 如何在Java中
- 16. 如何在Java中
- 17. 如何在Java中
- 18. 如何在Java中
- 19. 如何在Java中
- 20. 如何在Java中
- 21. 如何在Java中
- 22. 如何在Java中
- 23. 如何在Java中
- 24. 如何在Java中
- 25. 如何在Java中
- 26. 如何在Java中
- 27. 如何在Java中
- 28. 如何在Java中
- 29. 如何在Java中
- 30. 如何在Java中
如果你需要比較對象,我建議你看一下番石榴庫對象助手:https://code.google.com/p/guava-libraries/wiki/CommonObjectUtilitiesExplained – evgenyl 2013-03-21 08:39:26