Java Objects工具类原理及用法详解

 更新时间:2020年08月04日 11:41:50   作者:陈彦斌  
这篇文章主要介绍了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方法判断对象是否相等

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • springboot mybatis手动事务的实现

    springboot mybatis手动事务的实现

    本文主要介绍了springboot mybatis手动事务的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • java开发Dubbo负载均衡与集群容错示例详解

    java开发Dubbo负载均衡与集群容错示例详解

    这篇文章主要为大家介绍了java开发Dubbo负载均衡与集群容错示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Spring IOC和aop的原理及实例详解

    Spring IOC和aop的原理及实例详解

    这篇文章主要介绍了Spring IOC和aop的原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot解决406错误之返回对象缺少Getter/Setter方法引发的问题

    SpringBoot解决406错误之返回对象缺少Getter/Setter方法引发的问题

    在Spring Boot开发中,接口请求返回数据是系统交互的重要环节,然而,开发过程中常常会遇到由于数据类型或返回格式问题导致的错误,其中最常见的就是406 Not Acceptable异常,本篇文章以实际的案例出发,详细分析在POST请求中产生406错误的原因
    2024-11-11
  • eclipse启动一个Springboot项目

    eclipse启动一个Springboot项目

    本文主要介绍了eclipse启动一个Springboot项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java多线程知识点全面总结

    Java多线程知识点全面总结

    这篇文章主要介绍了Java多线程知识点全面总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 浅谈Spring5 响应式编程

    浅谈Spring5 响应式编程

    本篇文章主要介绍了浅谈Spring5 响应式编程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java操作IO对象流进行数据的读写

    Java操作IO对象流进行数据的读写

    这篇文章主要介绍了Java操作IO对象流进行数据的读写,本文通过例子逐步介绍了java如何操作IO流,和文字解析,需要的朋友可以参考下
    2021-07-07
  • java并发编程中实现可见性的四种可行方案解析

    java并发编程中实现可见性的四种可行方案解析

    这篇文章主要介绍了java并发编程中实现可见性的四种可行方案解析,使用关键字volatile和使用锁(如synchronized关键字或者java.util.concurrent包中的锁)来确保对共享变量的修改在多线程环境中能够正确地被其他线程所观察到,需要的朋友可以参考下
    2023-08-08
  • Spring Boot集成RabbitMQ以及队列模式操作

    Spring Boot集成RabbitMQ以及队列模式操作

    RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,下面这篇文章主要给大家介绍了关于Spring Boot集成RabbitMQ以及队列模式操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04

最新评论