关于equals方法的重写

在编写代码的时候 我们总是会需要重写equals代码
因为equals代码没有重写的时候比较的是两个对象的内存地址
而两个代码的内存地址不同 答案肯定返回false 这并不是我们希望看到的 因此要重写equals方法

public class EqualsZzz {public static void main(String[] args) {Name name1=new Name("zhuliang");Name name2=new Name("zhuliang");System.out.println(name1.equals(name2));}
}
class Name{String name;public Name() {}public Name(String name) {this.name = name;}}

我们首先写一个代码 我们可以看出 因为是两个不同的对象name1 和name2
因此两者做比较得到的结果也肯定是false 但是我们是想让他们为true的 所以以下重写equals代码

//这里是重写的equals方法
public  boolean equals(Object o){/*第一步判断 从上边的equals传过来的参数name2对应的也就是o是否为空如果为空 那么没有比较的意义了 返回false第二步判断 o是不是一个Object 因为我们要比较的两个肯定是相同类型的 不是相同类型的 那就不是相同的了 返回false以上两步放在一起写了 也就是if((null==o)||!(o instanceof Object))*/if((null==o)||!(o instanceof Object)) return false;/*第三步判断 他们的内存地址是否相同this表示当前的调用的 通俗点就是谁调用我谁就是this 由上面我们可以看出来name1是this  然后o是name2 如果两个住在一个家 那就为一个人了 返回true*/if (this==o) return true;/*如果o不是null 又是Object 同时 和this(也就是name1)的内存地址不同 没有返回值返回那么判断第四步 :首先由于o是Obejct  因此进行向下类型转换 把它转换为Name然后再由this.name也就是 调用者(name1)的name和强转之后的o(也就是n)的name进行比较 判断两个成员变量的值是否相同 也就是比较名字 名字相同那么这两个值就相同 返回true*/Name n=(Name) o;return  (this.name==(n.name)) ;}



通过结果我们可以看出 重写之后的equals返回为true 达到了我们的要求
同时 我们最后一步也可以写成


返回的依然为true 值得一提的是 这里调用的equals方法 是系统的equals方法

刚学Java 有错请大佬们指出 会进行更正 这个作为学习笔记 不要下手太重了=_=

equals方法该怎么重写呢相关推荐

  1. 重写equals方法时必须重写hashcode方法吗

    重写equals方法时必须重写hashcode 有规范: 1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode() 2,当obj ...

  2. 建议重写equals方法时也一并重写hashCode方法

    Object类中有这样一段说明,意思是建议我们equals方法和hashCode方法,或者一起重写,或者一起不重写,以维护hashCode的常规协定. 什么叫hashCode的常规协定呢? 我的理解就 ...

  3. 为什么重写equals方法时必须重写hashcode方法

    文章目录 1. == 与 equals的区别 2. 重写equals() 3. 为什么重写equals方法时必须重写hashcode方法? 3.1 Hash算法 3.2 HashCode() 相关文章 ...

  4. 为什么重写equals方法必须要重写hashCode方法

    为什么重写equals方法必须要重写hashCode方法 ​ 了解这个问题之前我们得需要知道hashCode的作用.equals方法和hashCode方法都是Object类中的基础方法,用来判断两个对 ...

  5. 重写equals方法一定要重写hashcode方法吗

    今天这句话疑惑了我一会,我就很疑惑啊,我单纯的比个对象我干嘛非得重写hashCode方法,为什么网上都在说一定要一定要,难道这不是分情况吗????? 不需要重写的情况 我们先来看Object的equa ...

  6. 重写equals方法一定要重写HashCode方法

    public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intVa ...

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

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

  8. 为什么使用HashMap需要重写hashcode和equals方法_java常见面试题敲黑板了,HashMap最全的整理,大厂必考...

    最近几天,在这样的大环境下显得疲惫不堪,但是我还是写下了这篇文章,希望对任何人都有用. HashMap是我们经常用到的数据结构,由数组和链表组成的数据结构如下图所示 上方是一张数组图片,数组里面每个地 ...

  9. ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作

    package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) { ...

最新文章

  1. 大洋洲群狼来了! 这是中国篮球学习契机?
  2. mysql查询语句习题._MySql数据库基本select查询语句练习题,初学者易懂。
  3. 他来了他来了!阿里云混合云全新升级高燃来袭!
  4. 5.慎重选择删除元素的方法
  5. Disruptor并发框架-1
  6. TOP互联网公司都在用,为什么SRE比传统运维更抢手?
  7. java.lang.ClassNotFoundException: org.apache.log4j.Logger
  8. php memcache 类库,php操作Memcache的一个类库的方法(代码)
  9. JAVA并发,线程异常捕获
  10. STM32F427 主频超过140M 死机
  11. SQLi LABS Less-31
  12. CREATE VIEW SQL:在SQL Server中使用索引视图
  13. visjs使用小记-2.option参数注释说明
  14. iOS弹窗UIAlertController的使用
  15. 蓝牙耳机测试软件apk_延迟测试app下载-蓝牙耳机延迟测试软件下载v1.9.1- 游侠下载站...
  16. 并发编程、并行、多线程、锁、同步、异步、多线程、单线程、阻塞io、非阻塞io
  17. 键盘鼠标录制哪个好用_视频录制不用慌!这4个免费软件随意挑,网友:电脑神器...
  18. ggplot制作条形图
  19. 利用js和jquary制作轮播图
  20. python笔迹识别_CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention

热门文章

  1. intel服务器主板维修,intel服务器主板
  2. 月历1997年php代码_PHP实现的简单日历代码
  3. AutoCAD 2010-AutoCAD 2010下载
  4. 最新金山毒霸通行证(90天)
  5. 计算机科学与技术分数高吗,现在学计算机都是傻子?千万别学计算机科学与技术是真的吗?...
  6. BlueJ的简单使用
  7. android特效集锦系列之八 仿快播搜索框悬浮文字搜索
  8. 系统分析师考试资料:投资回报率计算
  9. flv转gif动态图片是否有解决方案
  10. Office安装出错的解决方法,如“Microsoft Office Professional Plus 2013在安装过程中出错”。