大家都知道可以利用equals()方法去比较一个对象的内容是否相等,用==去比较对象指向的地址是否相等,但是当一个对象里面有多个属性的时候,我们必须覆写equals()方法去达到我们的目的
第一步:
- if (this == obj){ /*首先判断是否地址相等,如果地址相等,那么该对象一定相等,所以返回true*/
- return true ;
- }
第二步:
- if (!(obj instanceof Person)){//判断传入的参数是否为同一类型,如果不是同一类型的话,那么接下来的比较也毫无意义,所以不为同一类型的时候,返回false
- return false ;
- }
第三步:
- Person per = (Person)obj ;/*既然传入的obj对象与Person的实例是同一类型(前面一条if语句已经判断),那么我们可以进行向下转型操作,把obj对象转为Person对象*/
- if (per.name.equals (this.name)&&per.age==this.age){
- return true ;//判断传入对象的属性和Person对象的属性是否相等,如果相等,返回true ,表示同一个对象
- }else {
- return false ;//否则返回false
- }
第四部::
以下是实现代码
- class Person {
- private String name ;
- private int age ;
- public Person (String name, int age){
- this.name = name ;
- this.age = age ;
- }
- public boolean equals (Object obj){
- if (this == obj){
- return true ;
- }
- if (!(obj instanceof Person)){
- return false ;
- }
- Person per = (Person)obj ;
- if (per.name.equals (this.name)&&per.age==this.age){
- return true ;
- }else {
- return false ;
- }
- }
- public String toString (){
- return ("名字:"+this.name+"/t"+"年龄:"+this.age);
- }
- }
- public class ObjectCompareDemo{
- public static void main (String[] args){
- Person zhangsan = new Person ("张三",30);
- Person lisi = new Person ("张三",30);
- Person wangwu = new Person ("王五",30);
- if (zhangsan.equals (lisi)){
- System.out.println ("同一个人");
- }else {
- System.out.println ("不是同一个人");
- }
- }
- }