如何优雅的重写equals方法?

本文介绍如何为自定义类正确重写equals方法,确保能够比较对象的内容而非内存地址,包括实例类创建、equals方法重写及测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实不管用不用的到,每创建一个实例类,因为默认调用继承自Object类的equals方法,只能比较对象的地址是否相同,而不能比较对象的值。所以我们都应该重写equals方法,这是一种代码规范。

1.创建实例类

这里我创建了一个user类,属性有name和age;

public class user{
      private String name;
      private int age;
      public user(){//声明无参构造
      }
      public user(String name,int age){//声明有参构造
            this.name=name;
            this.age=age;
       }
}
2.重写equals方法
//注意:重写的equals需要放在相应的实例类中
public boolean equals(Object o){//重写equals方法
    if(o==null || !(o instanceof User))  
    //instanceof用于判断对象类型
       return false;
    if(o == this) //再判断传入的对象的值是不是与本身相等
       return true;
    User u = (User)o;
    return u.name==this.name && u.age=this.age;
    //最后判断姓名、年龄值(属性值)是否相等。
}
3.测试
public static void main(String[] args){
        User u1 = new User("wangwu",18);
        User u2 = new User("zhangsan",28);
        User u3 = new User("wangwu",18);
        System.out.println(u1.equals(u2)); 
        //u1和u2值不同,返回false
        System.out.println(u1.equals(u3)); 
        //u1和u3的对象不同,但值相同,返回true
}
4.实验结果

实践出真知

5.完整源码:
public class App {
    public static void main(String[] args){
        User u1 = new User("wangwu",18);
        User u2 = new User("zhangsan",28);
        User u3 = new User("wangwu",18);
        System.out.println(u1.equals(u2));
        System.out.println(u1.equals(u3));
    }
    public static class User{
        private String name;
        private int age;
        public User(){//声明无参构造
        }
        public User(String name,int age){//声明有参构造
            this.name=name;
            this.age=age;
        }
        
        public boolean equals(Object o){//重写equals方法
            if(o == null || !(o instanceof User))
                return false;
            if(o == this)
                return true;
            User u = (User)o;
            return (u.name == this.name) && (u.age == this.age);
        }
        
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值