前言:
目前看官们对“java核心技术卷一和卷二区别”大体比较关切,我们都想要学习一些“java核心技术卷一和卷二区别”的相关资讯。那么小编同时在网摘上搜集了一些关于“java核心技术卷一和卷二区别””的相关知识,希望小伙伴们能喜欢,大家一起来学习一下吧!原文5.2.2 equals 方法
Object 类中的 equals 方法用于检测一个对象是否等于另外一个对象。Object 类中实现的equals 方法将确定两个对象引用是否相同。这是一个合理的默认行为:如果两个对象相同,则这两个对象肯定就相等。对于很多类来说,这已经足够了。例如,比较两个 PrintStream对象是否相等并没有多大的意义。不过,经常需要基于状态检测对象的相等性,也就是说,如果两个对象有相同的状态,则认为这两个对象是相等的。
例如,如果两个员工对象的姓名、薪水和雇用日期都一样,就认为它们是相等的(在实际的员工数据库中,比较ID 才更有意义。我们主要用这个示例展示 equals 方法的实现机制)。
public class Employee{ // ... public boolean equals(Object otherObject){ // a quick test to see if the objects are identical if (this == otherObject) return true; // must return false if the explicit parameter is null if (otherObject == null) return false; // if the classes don't match, they can't be equal if (getClass() != other0bject.getClass()) return false; // now we know otherObject is a non-null Employee Employee other = (Employee) other0bject;// test whether the fields have identical values return name.equals(other.name) && salary = other.salary && hireDay.equals(other.hireDay); }}
getClass 方法将返回一个对象所属的类,有关这个方法的详细内容稍后进行介绍。在我们的检测中,只有当两个对象属于同一个类时,才有可能相等。
提示:为了防备name 或 hireDay 可能为 null的情况,需要使用 Objects.equals 方法。如果两个参数都为 null,Objects.equals(a,b)调用将返回true; 如果其中一个参数为 null则返回 false;否则,如果两个参数都不为 null,则调用 a.equals(b)。利用这个方法,
Employee.equals 方法的最后一条语句要改写为:
return Objects.equals(name, other.name)
&& salary = other.salary
&& Objects.equals(hireDay, other.hireDay);
在子类中定义 equals 方法时,首先调用超类的 equals。如果检测失败,那么对象就不可能相等。如果超类中的字段都相等,则可以继续比较子类中的实例字段。
public class Manager extends Employee{ public boolean equals(0bject otherObject){ if (!super.equals(otherObject)) return false; // super.equals checked that this and otherObject belong to the same class Manager other =(Manager) otherObject; return bonus == other.bonus; } }
注释:第4章介绍过,记录是一种特殊形式的不可变类,其状态完全由“标准”构造器中设置的字段来定义。记录会自动定义一个比较字段的 equals 方法。两个记录实例中相应字段值相等时,这两个记录实例就相等。
标签: #java核心技术卷一和卷二区别