Java Objects工具类重点方法使用
Objects工具类#
- jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法
- 重点方法
- equals
- 用于字符串和包装对象的比较,先比较内存地址,再比较值
- deepEquals
- 数组的比较,先比较内存地址,再比较值,如String、char、byte、int数组,或者包装类型Integer等数组
- hashCode
- 返回对象的hashCode,若传入的为null,则返回0
- hash
- 传入可变参数的所有值得hashCode的总和,底层用Arrays.hashCode
- 可变参数
- equals
重写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方法判断对象是否相等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-07-30 jQuery Validate表单校验
2019-07-30 Ajax异步后台加载Html绑定不上事件