Object 类中的equals()方法.pptx
Object 类中的equals()方法;理解equals()方法的功能; 清楚Object类中的equals()方法原型 了解String类中的equals()方法原型 会模仿写Person类、Student类及Teacher类中的equals()方法; 会根据类的实例相等比较的性质写类的equals()方法。;public boolean equals(Object obj) { return (this == obj); } Object类中的equals 方法,两个对象为同一个时返回true,如果不是同一个返回false。 通常,equals方法用于比较两个对象的内容是否一样,这时就需要类去覆盖Object的equals()方法,在equal()方法内自定义相等的规则。; public boolean equals(Object anObject) { if (this == anObject) { return true; //如果两个对象为同一个,返回true } //如果参数对象也是String类型 if (anObject instanceof String) { St 在Java编程语言中,`equals()`方法是一个非常关键的方法,主要用于比较两个对象是否相等。在深入探讨之前,我们先来了解一下`equals()`方法的基本概念。`equals()`方法源自Object类,是所有Java类的基类,因此所有的类都默认继承了`equals()`方法。在Object类中的`equals()`方法实现很简单,它只是检查两个对象的引用是否指向内存中的同一个位置,即判断它们是否是同一个对象。如果两个对象引用指向的是同一个内存地址,那么`equals()`返回`true`,否则返回`false`。 ```java public boolean equals(Object obj) { return (this == obj); } ``` 然而,这并不总是满足实际需求,因为大多数时候我们需要比较的是对象的内容而不是它们的引用。例如,当我们比较两个字符串时,我们可能关心的是它们的字符序列是否相同,而不关心它们是否是同一个对象。这就是为什么许多类,如String,会覆盖Object类的`equals()`方法,以便自定义比较逻辑。 对于String类的`equals()`方法,它是这样实现的: ```java public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; // 检查字符序列是否相同 // 省略了具体实现,通常会用到循环和字符比较 return true; } return false; } ``` 这里,String类首先检查传入的对象是否也是String类型,然后将它转换为String并比较其字符序列。如果字符序列相同,`equals()`返回`true`,否则返回`false`。 在自定义类中,比如Person、Student或Teacher,我们也可能需要覆盖`equals()`方法来实现特定的比较逻辑。例如,对于Person类,我们可能希望比较两个Person对象的姓名和年龄是否相同: ```java @Override public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof Person) { Person anotherPerson = (Person) anObject; // 假设Person类有两个成员变量:name和age if (this.name.equals(anotherPerson.name) && this.age == anotherPerson.age) { return true; } } return false; } ``` 在这个例子中,我们首先检查传入的对象是否也是Person类型,然后将其转换为Person并比较其name和age属性。如果这些属性值都相等,`equals()`返回`true`,否则返回`false`。 总结一下`equals()`方法的一些重要原则: 1. 如果比较的两个对象是同一个对象(即引用相同),返回`true`。 2. 否则,如果对象类型兼容,将对象转换为同一类型,并比较它们的数据域(成员变量)的值。如果所有数据域值都相等,返回`true`。 3. 其他情况下,返回`false`。 在编写自定义的`equals()`方法时,还需要考虑以下几点: - 一致性:如果对象的值没有改变,`equals()`方法应该始终返回相同的结果。 - 对称性:对于任何非null对象x和y,如果x.equals(y)为`true`,那么y.equals(x)也应该为`true`。 - 传递性:对于任何非null对象x、y和z,如果x.equals(y)为`true`且y.equals(z)为`true`,那么x.equals(z)也应该为`true`。 - 非空性:对于任何非null对象x,x.equals(null)`应该返回`false`。 此外,覆盖`equals()`方法时通常也要同时覆盖`hashCode()`方法,以确保符合Java集合框架的约定,保证对象在哈希表中的正确行为。`hashCode()`方法返回一个整数值,代表对象的哈希码,相同的对象应该有相同的哈希码。如果两个对象根据`equals()`方法是相等的,它们的哈希码也应该是相等的。