核心结论:子类重写Object类的equals方法需要注意的事项

重写的时候一定要注意equals方法的参数是Object

obj类型的引用变量。绝对不可以是其他类型的变量。因为这样的话,和父类Object的equals方法名相同,但是参数列表不同,javac认为是重载。当底层方法真的要调用equals方法的时候,不会调用你重载的equals方法,使得原本打算重载的equals方法失去了意义。

原文:

1. Object

1). Object类的基本特点

(1). Object类在Java整个继承体系中的位置

[1].Object类位于整个Java继承体系的根节点。

[2].所有的类都直接或者间接地继承了这个类。

===>所有的类都具有Object类中定义的属性和方法

[3]. 有的时候,尽管没有写一个类具体继承哪个类,这个类也会默认继承Object类。

【默认继承】指的就是某个类不通过关键字extends就可以继承Object这个类。

(2). Object类的构造方法

查询Object类的源码可知:Object类中没有显式的构造方法。这样可以推断出,JVM会为Object添加上一个默认的空参构造方法。publicObject(){}

【注意】由于Object是所有类的根父类,Object类中的第一行没有super()语句

2).Object类的常用方法

(1). equals()方法

[1]. equals()方法的作用:Java认为所有的对象都具有比较性,都可以比较两个对象是否相同

[2]. equals()方法的源码:

publicbooleanequals(Object

obj) {

return(this==obj);

}

所以:原生的Object的equals方法是***调用比较运算符==***比较两个对象的地址是否一致。

[3]. equals()方法的参数:是Object类本身的引用

由于equals(Object obj)参数来的事根父类Object的引用 obj,

所以Object类的对象可以和任意类的对象进行比较。比较的是二者的地址值是否一致。

【注意】:单纯的比较两个对象的地址是没有意义的,所以子类经常重写Object类的equals方法来进行根据特殊条件进行对象的比较。

[4].子类重写Object类的equals方法需要注意的事项

重写的时候一定要注意equals方法的参数是Object

obj类型的引用变量。绝对不可以是其他类型的变量。因为这样的话,和父类Object的equals方法名相同,但是参数列表不同,javac认为是重载。当底层方法真的要调用equals方法的时候,不会调用你重载的equals方法,使得原本打算重载的equals方法失去了意义。

publicbooleanequals(Demo d){

//错误的重写!!!

}

这样不是重写Object类的方法,一旦这样写完,底层调用不到这个重写的

publicbooleanequals(Object

obj){//正确的重写

}

(3). hashCode()方法

[1]. hashCode()方法的作用:每个对象都有自己的内存地址值,可以映射为Hash码。Java中用hashCode()方法获取对象在内存中映射的哈希码。

[2] hashCode()方法的源码:

publicnativeinthashCode();

这个方法是一个本地化方法,用native关键字来修饰。这个方法要调用操作系统底层的代码。分配内存地址是有OS来决定的。所以是本地化方法,看不到里面的源码。

(2). toString()方法

[1]. toString()方法的作用:打印这个对象的hash码值和类名

[2]. toString()方法的源码:

publicString

toString() {

returngetClass().getName()

+"@"+

Integer.toHexString(hashCode());

}

{1}. hashCode()返回的是哈希码的十进制值,这里面将其转化为十六进制的字符串。

{2}. Object的toString返回值是getClass()和hashCode()拼接出来的

java中equals方法的参数_equals方法的参数必须为Object类型的引用变量相关推荐

  1. Java中equals()方法和==的区别分析

    Java中equals方法和==的区别分析 equals(Object obj)方法,将对象与传入的obj进行比较,相等返回true,否则返回false.equals方法和"==" ...

  2. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  3. 在 Java 中初始化 List 的五种方法

    转载自  在 Java 中初始化 List 的五种方法 Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式. 1.构造 List 后使用 List.add 初始化 List< ...

  4. 高级 | Java中获取类名的3种方法

    转载自 高级 | Java中获取类名的3种方法 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonical ...

  5. [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递

    参考链接: 用Java传递和返回对象 看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型  值传递:引用类型,地址值传递,所 ...

  6. Java中创建数组的几种方法

    Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...

  7. 谈谈java中遍历Map的几种方法

    java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...

  8. Java 中 List 分片的 5 种方法!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时 ...

  9. Java中的length字段和length()方法

    本文主要讲述Java中的length字段和length()方法,有需要的朋友可以参考下,更多Java教程知识,请登陆疯狂软件教育官网. 首先,你能快速回答下面的问题吗? 如果没有IDE(集成开发环境) ...

最新文章

  1. 微信小程序多项选择器_微信小程序三级联动之多列选择器
  2. 迁移学习,让深度学习不再困难……
  3. mac图标包_Mac 生产力配置手册,从 Homebrew 说开去
  4. 建议收藏!数据分析和机器学习必备SQL技能
  5. boost::core::bit_cast的测试程序
  6. 1821: 入学考试(1261采药)01背包
  7. 开源硬件论坛,燃烧你的创造力
  8. 论文阅读(2)--Picking Deep Filter Responses for Fine-grained Image Recognition
  9. JavaMail中附件名称有乱码
  10. 北京理工大学计算机学院研究生培养方案,北京理工大学2018版学术型研究生培养方案.PDF...
  11. 无路可逃:Oracle 12.2 BigSCN新特性可能的DB Link兼容性问题
  12. [LeetCode]题解(python):016-3Sum Closest
  13. Redis,唯快不破!
  14. 用swift写的一款小游戏,模仿的僵尸危机
  15. spring 使用aop 缺少依赖包aspectjweaver.jar 和spring-aop.jar报错
  16. mysql mysqld multi_MySQL 使用mysqld_multi部署单机多实例详细过程 (转)
  17. aspen压缩因子_利用aspen plus进行物性参数的估算
  18. 南非银行“内鬼”偷走主密钥,后将更换1200万张客户卡,损失惨重
  19. STM32自定义USB设备开发详细流程讲解及全套资料源码下载(基于libusb)
  20. 如何在Linux系统中将无线网卡配置为AP

热门文章

  1. Nginx 启动配置文件
  2. 基于阿里云平台的短信验证码服务API的使用
  3. 手把手系列之十七——手把手教你做蛋挞
  4. 百家号图文视频优质规则
  5. finebi实现对环境基础数据可视化图表分析
  6. 高标准生产车间空压站油水环保处理设备 ows.01275.00.00
  7. 后缀自动机求多个串的最长公共子串+拓补排序讲解+LCS2 - Longest Common Substring II
  8. 常用的iOS开发工具推荐
  9. 一文搞定Darma Cash(DMCH)!
  10. 学习英文-学以致用【场景:运动,怀念科比】