equals方法

很多面试题都会问equals方法== 运算符的区别,== 运算符用于比较基本类型的值是否相同,或者比较两个对象的引用是否相等,而equals用于比较两个对象是否相等,这样说可能比较宽泛,两个对象如何才是相等的呢?这个标尺该如何界定?首先来看Object类中的equals方法:

public boolean equals(Object obj) {return (this == obj);}

可以看到,在Object类中,==运算符和equals方法是等价的,都是比较两个对象的引用是否相等,从另一方面来讲,如果两个对象的引用相等,那么这两个对象一定是相等的。对于自定义的一个对象,如果不重写equals方法,那么在比较对象的时候就会调用Object类的equals方法,也就是用 == 运算符比较两个对象。接着来看String类中的重写的equals方法:

 public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

String是引用类型,比较时不能比较引用是否相等,而是比较字符串的内容是否相等。所以String类定义两个对象相等的标准是字符串内容都相同。

在Java规范中,对equals方法的使用必须遵循以下几个原则:

1)自反性。对于任何非空引用值x,x. equals(x)都应返回true。
2)对称性。对于任何非空引用值x和y,当且仅当y. equals(x)返回true时,x.equals(y)才应返回true。
3)传递性。对于任何非空引用值x、y和z,如果x. equals(y)返回true,并且y.equals(z)返回true,那么x. equals(z)应返回true。
4)一致性。对于任何非空引用值x和y,多次调用x. equals(y)始终返回true或始终返回false,前提是对象上equals比较中所用的信息没有被修改。

总结

  • 自定义类有时候有必要写equals方法

Object类的equals方法相关推荐

  1. 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法

    Object 简述 Object 类是 Java 中所有类的始祖, 在 Java 中每个类都是由它扩展而来的. 在 Java 中, 只有基本类型 ( primitive types) 不是对象, 例如 ...

  2. 重写Object类的equals方法

    package com.learn.demo01.Object;import java.util.ArrayList;public class Demo02Equals {public static ...

  3. Java基础Object类的equals方法

    关于Object类中的equals方法 1.equals方法的源代码 public boolean equals(Object obj) {return (this == obj);}以上这个方法是O ...

  4. JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能

    JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...

  5. Java重写object类的equals方法

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  6. java——API—— Object类——重写equals方法

    重写Object类的equals方法 如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法. Object类的equals方法,默认比较的是两个 ...

  7. java 对象重写equals方法_Java如何重写object类的equals方法详解

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  8. 【宋红康学习日记11】Object类与equals方法

    1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在St ...

  9. Object类—复写equals方法,hashCode方法,toString方法

    Object:所有类的根类. Object是不断抽取而来,具备着所有对象都具备的共性内容. class Person extends Object {private int age;Person(in ...

最新文章

  1. C#语言与面向对象技术(6)
  2. 【命令】usemod 的用法
  3. Hibernate【XXXX.hbm.xml】总结
  4. 小豆包的学习之旅:里程计运动模型
  5. vc通过COM方式调用CertEnroll
  6. 蛋白质组学和代谢组学方法在生物标志物发现中的应用 Proteomic and Metabolomic Approaches to Biomarker Discovery
  7. spring cloud Alibaba 的 Nacos学习笔记
  8. linux系统安装python包_Linux系统安装Python
  9. Gurobi建模遇到的坑
  10. HTML是由____构成的____文件,JSP填空题
  11. 如何查看本机IP地址?
  12. python日历教程_基于python实现简单日历
  13. 【网络空间安全数学基础第8章】环和域
  14. css 全局撑开页面
  15. Ant Design Icon图标使用
  16. 关于Android中使用WebView播放网络视频不能全屏的问题
  17. 20210212【学习笔记】Python初步
  18. Linux 修改用户名
  19. 指责TD的人几个是有资格的?--艾瑞网专家项立刚的博客专栏 - 艾瑞网
  20. 计算机科学与技术中文核心期刊

热门文章

  1. RNA-seq 详细教程:似然比检验(13)
  2. 程序员年底好找工作吗?
  3. CV-2022:CodeFormer【最强的AI 视频、图片修复】【南洋理工大学 S-Lab】
  4. 在U盘上安装debian linux
  5. 一步一动在PVE安装黑群晖
  6. 【K-S检验】检验两个数据集的分布是否一致
  7. 手机网页UI框架jQuery Mobile介绍之按钮篇
  8. CVE-2018-4878 flash漏洞复现
  9. C语言转义字符,注释
  10. python 数据类型