jac*_*ind 5 java overriding equals
该equals方法比较两个对象值是否相等.我的问题是它如何比较这两个对象?怎么能告诉两个对象是否相等?我想知道它基于它比较两个对象.我不包括这个hashCode方法.
默认实现,即类之一java.lang.Object,只是测试引用是否属于同一个对象:
150 public boolean equals(Object obj) {
151 return (this == obj);
152 }
Run Code Online (Sandbox Code Playgroud)
Java规范中描述了引用相等运算符:
在运行时,如果操作数值都为null或者两者都引用相同的对象或数组,则==的结果为true; 否则,结果是错误的.
此默认行为通常在语义上不令人满意.例如,您无法使用以下方法测试大型Integer实例的相等性==:
Integer a = new Integer(1000);
Integer b = new Integer(1000);
System.out.println(a==b); // prints false
Run Code Online (Sandbox Code Playgroud)
这就是覆盖该方法的原因:
722 public boolean equals(Object obj) {
723 if (obj instanceof Integer) {
724 return value == ((Integer)obj).intValue();
725 }
726 return false;
727 }
Run Code Online (Sandbox Code Playgroud)
这使得:
System.out.println(a.equals(b)); // prints true
Run Code Online (Sandbox Code Playgroud)
覆盖默认行为的类应根据标识字段(通常是所有字段)的相等性来测试语义相等性.
如您所知,您应该相应地覆盖该hashCode方法.
| 归档时间: |
|
| 查看次数: |
13606 次 |
| 最近记录: |