当前位置: 首页 > news >正文

JavaSE知识分享——Object类小结

接下来博主会持续更新JavaSE、Java数据结构、MySQL、JavaEE、微服务、Redis等等内容的知识点整理。后续我也会精心制作算法解析、项目经验系列内容,内容绝对干货。相信这些文章能够成为我和大家的“葵花宝典”,喜欢的话就关注一下吧!敬请期待!

文章目录

  • Object类
  • 对象比较:equals方法
  • hashCode方法

Object类

  • Object类是Java默认提供的一个类。 Java里面除了Object类,其他所有的类都是存在继承关系的,它们默认会继承Object父类。那么这样所有类的对象都可以使用Object的引用进行接收。

  • 在开发之中, Object类是参数的最高统一类型。Object类也存在定义好的一些方法,之前已经介绍过一个:toString()方法

toString() 就是来获取一个对象的信息的,调用时默认输出对象哈希码,也可以重写toString()方法,来自定义输出内容。

本节我们再介绍两个方法: equals()方法, hashCode()方法。

对象比较:equals方法

我们知道回忆一下,在Java中, 用 = =操作符进行比较时:
1.如果= =操作符左右两侧是基本类型变量,比较的是变量中值是否相同
2.如果= =操作符左右两侧是引用类型变量,比较的是引用变量地址是否相同

equals方法原型:

// Object类中的equals方法
public boolean equals(Object obj) {
return (this = = obj); // 使用引用中的地址直接来进行比较
我们看到equals方法实现也是使用==操作符,那么如果要比较对象中的内容,还是必须要重写Object中的equals方法。
Person类重写equals方法后,然后比较:
class Person{
//各属性
//...
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false ;
}
if(this == obj) {
return true ;
}
// 若obj引用中不是Person类对象
if (!(obj instanceof Person)) {
return false ;
}
Person person = (Person) obj ; // 向下转型,比较属性值
return this.name.equals(person.name) && this.age==person.age ;
//代码中 this.name.equals(person.name) 其实是调用了String类中的重写的equals方法
//而这个重写的方法就是用来比较对象中实际数据的,而不是与操作符一样比较地址。
//因为name是一个是String类型的变量,编译器识别到了直接默认调用String类中重写的equals方法。
}
}

hashCode方法

hashCode方法源码:

public native int hashCode();

可以看到该方法是一个native方法,就是底层是由C/C++代码写的,我们看不到。

  • 在业务处理中我们主观在逻辑上认为两个名字相同,年龄相同的person对象,将存储在同一个位置,主观认为他们的哈希值应该是相同的。
  • 而如果不重写hashCode()方法,那么在原本的hashCode方法中,计算机逻辑上则认为他们本身就是两个对象,那么返回的哈希值实际上就是不一样的。那么这样在实际业务中就会出现问题。

比如:在两次数据添加时,对象中储存的数值是一模一样的,但是两个对象的哈希值确实不一样,那么此时计算机就会添加重复的数据。

那这个时候就需要我们在类中重写hashCode()方法:

class Person {
public String name;
public int age;//构造方法…@Override
public int hashCode() {
return Objects.hash(name, age);//直接调用Objects工具类中的hash()方法
}
}
  • hash(Object... values) 是 Objects 类中的一个静态方法。
    它可以接收任意数量、任意类型的参数( name 和 age 就是传入的参数),并基于这些参数生成一个唯一的整数哈希码。

  • 其实对hashCode的重写源于Java的一个核心约定:如果两个对象根据 equals 方法比较是相等的(业务上数据的数值是一样的),那么调用它们的hashCode 方法必须返回相同的整数值 。这样的约定也就方便业务处理。

觉得文章对你有帮助的话就点个赞,收藏起来这份免费的资料吧!也欢迎大家在评论区讨论技术、经验

http://www.dtcms.com/a/581628.html

相关文章:

  • GitHub 热榜项目 - 日榜(2025-11-07)
  • 数字人技术:虚实交融的未来图景正在展开
  • 网站301检测烟台网站建设找企汇互联专业
  • TCP 的三次握手和四次挥手
  • 多平台视频下载工具的实现原理与技术实践, 免费下载视频下载工具
  • R MySQL 连接
  • FPGA——定点数的表示
  • PostgreSQL 子查询
  • AIStarter跨平台完工:Win/Mac/Linux一键部署Stable Diffusion
  • 李宏毅机器学习笔记42
  • 珠海市网络营销协会的官方网站制作网页网站用的是什么
  • SwinPaste: 一种基于Swin Transformer的RGB引导热成像图像超分辨率框架
  • 在ubtntu系统上安装redis踩坑
  • 什么是HTTPS?对网站有什么用?
  • 【ZeroRange WebRTC】TURN 在 WebRTC 中的角色与工作原理(深入指南)
  • 〈Java高并发核心编程·卷2〉(第2篇)—— Java内置锁与线程安全
  • 【全网首发】2025 华为OD 机试双机位A卷机考真题库清单(全真题库)含考点说明(OD上机考试双机位A卷)
  • AI研究-123 FSD V14 深度解析:纯视觉 SDF 与端到端 相比 V12 具体升级
  • python做网站好处陕西网站建设哪家好
  • 网站建设推销话术用模块做网站
  • Rust 练习册 :Macros与宏系统
  • 【Ruby】Mixins扩展方式之include,extend和prepend
  • 欧美 电台 网站模板4防伪查询网站
  • MTK外包面经
  • [linux] grep命令的使用
  • 前后端跨域问题解决
  • 通往AGI的模块化路径:一个可能的技术架构(同时解答微调与RAG之争)
  • cartographer ros 配置详解
  • 告别人工登高 无人机智能巡检平台让效率提升300%
  • docker登录ghcr.io