对上周考试中重写equals方法的理解,
public boolean equals(Object object) { if (this == object) return true; if (object == null || getClass() != object.getClass()) return false; if (!super.equals(object)) return false; Book book = (Book) object; return java.util.Objects.equals(name, book.name) && java.util.Objects.equals(publisher, book.publisher); }
1、第一行是equals()方法的方法头,参数为Object object,Object类是所有类的直接或间接父类,因此 Object + 参数名称 代表任何继承Object的实例,即任何一个对象。使形参的范围更广,使用更便利。
2、第二行是对两对象的地址进行比较,其中 this 指当前对象自身,即谁调用 equals 谁便是 this 。object 是一个形参,下面会赋值给它。如果两者地址相等,则两个对象一定相等。
3、第三行是对两对象所属类进行比较,其中 getclass()是得到这个对象的类型类(举例来说就是:获得int long boolean等等这些类型)。 getclass() 方法作用是:获得了(类)Class,进而通过返回的Class对象获取Person的相关信息。如果object指向一个空对象或者两个对象类型不同,则可以直接判断出两对象不等。
4、第四行是如果它的父类和object也不等的话就可判读两对象不等。