zoukankan      html  css  js  c++  java
  • java 重写hashcode和equals

    • Object源码

    public class Object {
       //native表明该方法是否操作系统实现,java调用操作系统底层代码获取哈希值
      public native int hashCode();
      //直接比较地址
      public boolean equals(Object obj) { return (this == obj); }
    }
    • 重写场景

        需要重写equals()的场景:对引用类型使用equals比较时
        需要重写hashcode()的场景:hasMap集合key为对象时(hasMap底层使用key的hascode判断是否相同若key是引用类型这时需要重写对象的hashcode)

    • 重写示例一

    package indi.cyh.entity;
    
    /**
     * @ClassName Student
     * @Description TODO
     * @Author cyh
     * @Date 2021/2/5 0005 11:22
     */
    public class Student {
        private String name;// 姓名
        private String sex;// 性别
        private String age;// 年龄
        private float weight;// 体重
        private String addr;// 地址
    
        // 重写hashcode方法
        @Override
        public int hashCode() {
            int result = name.hashCode();
            result = 17 * result + sex.hashCode();
            result = 17 * result + age.hashCode();
            return result;
        }
    
        // 重写equals方法
        @Override
        public boolean equals(Object obj) {
            if(!(obj instanceof Student)) {
                // instanceof 已经处理了obj = null的情况
                return false;
            }
            Student stuObj = (Student) obj;
            // 地址相等
            if (this == stuObj) {
                return true;
            }
            // 如果两个对象姓名、年龄、性别相等,我们认为两个对象相等
            if (stuObj.name.equals(this.name) && stuObj.sex.equals(this.sex) && stuObj.age.equals(this.age)) {
                return true;
            } else {
                return false;
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public float getWeight() {
            return weight;
        }
    
        public void setWeight(float weight) {
            this.weight = weight;
        }
    
        public String getAddr() {
            return addr;
        }
    
        public void setAddr(String addr) {
            this.addr = addr;
        }
    }
    • 重写示例二

    //利用lombok项目提供的注解功能  等效于示例一
    @Data
    @EqualsAndHashCode(exclude = {"name","sex","age"})
    public class Student {
    private String name;// 姓名
    private String sex;// 性别
    private String age;// 年龄
    private float weight;// 体重
    private String addr;// 地址
    }
  • 相关阅读:
    手机缺失sqlite3时操作数据库的多种解决方案 ----adb命令科普
    adb root错误信息adbd cannot run as root in production builds问题解决
    Android Studio中导入v4,v7和recyclerview-v7包的方法
    AndroidStudio项目提交到github最详细步骤
    Android微信开放平台,申请移动应用的 应用签名 如何获取
    利用Intent.ACTION_SEND进行分享
    51nod 1737配对
    UTR#2 T1
    bzoj4571: [Scoi2016]美味
    bzoj2006: [NOI2010]超级钢琴
  • 原文地址:https://www.cnblogs.com/cyh1282656849/p/14377254.html
Copyright © 2011-2022 走看看