我们已经准备好了,你呢?

我们与您携手共赢,为您的企业形象保驾护航!

当前位置: 首页 > 知识 > 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方法判断对象是否相等
免责声明:本站内容(文字信息+图片素材)来源于互联网公开数据整理或转载,仅用于学习参考,如有侵权问题,请及时联系本站删除,我们将在5个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)

我们已经准备好了,你呢?

我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

132-7207-3477

上班时间

周一到周五 09:00-18:00

二维码
线