• 深入理解重写equals()方法


    /**
     * 深入理解重写equals()方法
     *      结论:自定义的类,如果需要对"对象"进行比较,都需要根据实际需要重写"equals()"方法
     */
    public class Test {
        public static void main(String[] args) {
            //创建用户对象
            //下行代码中的"new Address("秦皇岛市","海阳路","066300")"就是一个家庭住址对象
            User u1 = new User("张三",new Address("秦皇岛市","海阳路","066300"));
            User u2 = new User("张三",new Address("秦皇岛市","海阳路","066300"));
    
            //比较u1与u2是否相等
            //使用"=="比较
            System.out.println(u1 == u2);//执行结果:false
            //使用equals()方法比较
            //User类的equals()方法重写,但是Address类的equals()不重写,比较的结果是:false
            //User类的equals()方法重写,Address类的equals()也重写,比较的结果是:true
            System.out.println(u1.equals(u2));
            
            //字符串使用赋值的方式创建,可以使用"=="去比较,也可以使用equals()方法去比较,建议使用equals()方法
            String s1 = "abc";
            String s2 = "abc";
            System.out.println(s1.equals(s2));  //true
            System.out.println(s1 == s2);       //true
        }
    }
    //用户类
    class User{
        //用户姓名
        private String name;
        //用户家庭住址
        private Address addr;
        //无参构造
        public User() {
        }
        //有参构造
        public User(String name, Address addr) {
            this.name = name;
            this.addr = addr;
        }
    
        //get and set方法(略)
    
        //重写toString()方法
        public String toString() {
            //要求返回用户姓名和家庭住址
            return "用户姓名:" + name + ", 家庭住址:" + addr;
        }
    
        //重写equals()方法
        // 这个equals()方法比较的是两个用户是否相等  两个用户相等的条件是:用户名相同且家庭住址相同
        // 这个方法里需要比较用户的家庭住址,所以Address类的equals()方法必须重写
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || !(o instanceof User)) return false;
            User user = (User) o;
            return name.equals(user.name) && addr.equals(user.addr);
        }
    }
    //家庭住址类
    class Address{
        //城市
        private String city;
        //街道
        private String street;
        //邮政编码
        private String zipCode;
        //无参构造
        public Address() {
        }
        //有参构造
        public Address(String city, String street, String zipCode) {
            this.city = city;
            this.street = street;
            this.zipCode = zipCode;
        }
    
        //get and set方法(略)
    
        //重写toString()方法
        public String toString() {
            //返回城市、街道和邮政编码
            return "居住城市:" + city + ", 街道:" + street + ", 邮政编码:" + zipCode;
        }
    
        //重写equals()方法
        // 这个equals()方法比较的是两个对象的家庭住址是否相等
        //判断相等的条件是:城市相同、街道相同、邮政编码相同
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || !(o instanceof Address)) return false;
            Address address = (Address) o;
            return this.city.equals(address.city) &&
                    this.street.equals(address.street) &&
                    this.zipCode.equals(address.zipCode);
        }
    }
  • 相关阅读:
    笑霸餐厅 | 瑞吉外卖项目 | 完整基础部分(后端学习笔记)
    Buffer Pool
    文件打包下载excel导出和word导出
    推荐模型-上下文感知-2018:AutoInt
    深度学习(pytorch)——神经网络完整模型训练套路及其注意事项
    EDAS 是什么
    什么,这年头还有人不知道404
    动态内存管理
    01_Linux字符设备驱动开发
    题解——二维费用背包问题(宠物小精灵之收服、潜水员)
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/128145116