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;// 地址
    }
  • 相关阅读:
    Homebrew简介和基本使用
    在Mac OSX上配置Appium+Android自动化测试环境
    Python Selenium 常用方法总结(不断补充)
    python 分享一个通过 (key1.key2.key3) 形式获取嵌套字典值的方法
    python操作MongoDB
    webpack2.0学习
    node+webpack环境搭建 vue.js 2.0 基础学习笔记
    前端之路
    swiper组件实现向上翻页时缩小
    sass的视频教程
  • 原文地址:https://www.cnblogs.com/cyh1282656849/p/14377254.html
Copyright © 2011-2022 走看看