zoukankan      html  css  js  c++  java
  • Java Objects工具类重点方法使用

    Objects工具类

    • jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法
    • 重点方法
      • equals
        • 用于字符串和包装对象的比较,先比较内存地址,再比较值
      • deepEquals
        • 数组的比较,先比较内存地址,再比较值,如String、char、byte、int数组,或者包装类型Integer等数组
      • hashCode
        • 返回对象的hashCode,若传入的为null,则返回0
      • hash
        • 传入可变参数的所有值得hashCode的总和,底层用Arrays.hashCode
      • 可变参数

    重写HashCode和Equals

    HashCode方法

      顶级类Object里面的方法,所有类都是继承Object的,返回值int类型

      根据一定的hash规则(存储地址,字段,或者长度等),映射成一个数值,即散列值

    Equals方法

      顶级类Object里面的方法,所有类都是继承Object的,返回值boolean类型

      根据自定义的匹配规则,用于匹配两个对象是否一样,一般逻辑

    //判断地址是否⼀样
    //⾮空判断和class类型判断
    //强转
    //对象⾥⾯的字段⼀⼀匹配

    重写规则

        class User {
            private int age;
            private String name;
            private Date time;
    
            // 省略setter和getter⽅法
            @Override
            public boolean equals(Object o) {
                if (this == o)
                    return true;
                if (o == null || getClass() != o.getClass())
                    return false;
                User user = (User) o;
                return age == user.age && Objects.equals(name, user.name) && Objects.equals(time, user.time);
            }
    
            @Override
            public int hashCode() {
                return Objects.hash(age, name, time);
            }
        }

    问题:当向集合中插入对象时,如何判别在集合中是否已经存在该对象,比如Set确保存储对象的唯一,并判断是不是同一个对象呢?

    • 依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法
    • 判断两个对象是否一样,首先判断插入obj的hashCode值是否存在,hashCode值不存在则直接插入集合,值存在则还需要判断equals方法判断对象是否相等
  • 相关阅读:
    【sqlite】3.ADO.NET实体数据模型增删改查
    【sqlite】1.Vs2019 ado.net实体模型安装教程
    【sqlite】2.Nuget下载好Sqlite.EF6后出现运行报错处理办法
    WPF-数据绑定:日期时间格式
    Entity Framework Database.SetInitializer的几种参数
    收藏
    Sql时间函数
    SQL中的循环、for循环、游标
    C# DateTime 时间格式
    js setInterval()函数 [倒计时用]
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13407269.html
Copyright © 2011-2022 走看看