/**首先要新建一个类,定义成员变量,通过重写* equals()方法比较成员变量的值*/package july.star.equals;/***  首先要新建一个类,定义成员变量,通过重写* equals()方法比较成员变量的值* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月14日 下午7:04:06* @version 1.0*/
public class Student {String name;int age;String sex;public Student(String name, int age,String sex) {this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}//第一步分析/*@Overridepublic boolean equals(Object obj) {*//*** 这里要改进,根据这里的比较成员变量来决定返回true还是false* 这里其实要比较的就是name,age和sex* 但是,name是String类型的,而String是引用类型的,所以,在这里不能直接用==比较,* 应该用equals()比较* this  -- s1* obj -- s2*//*if(obj == null){return false;}//要使用的是学生类的特有成员,所以要向下转型Student s = (Student)obj; // s -- obj -- s2if(this.age == s.age && this.name.equals(s.name) && this.sex.equals(s.sex)){return true;}else{return false;}}*///第二步优化
/*   @Overridepublic boolean equals(Object obj) {//为了提高效率if(this == obj){return true;}//为了提供程序的健壮性//我先判断一下,obj是不是学生的一个对象,如果是,再做向下转型,如果不是,直接返回false//这个时候,我们要判断的是对象是否是某个类的对象?if (!(obj instanceof Student)) {return false;}//如果是就继续Student s = (Student)obj;System.out.println("同一个对象,还需要向下转型比较吗?");return this.name.equals(s.name)&&this.age==s.age&&this.sex.equals(s.sex);}*///重写equals要实现hachCode()@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());result = prime * result + ((sex == null) ? 0 : sex.hashCode());return result;}//第三步@Overridepublic boolean equals(Object obj) {if (this == obj)   //判断对象地址是否相等,如果是就不用判断,提高效率return true;if (obj == null)   //对象为空,则不往下走了return false;if (getClass() != obj.getClass())  //判断两个对象是否一样:class july.star.equals.Student--class july.star.equals.Studentreturn false;Student other = (Student) obj;  //向下转型/** 判断成员变量是否一样 */if (age != other.age)   return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;if (sex == null) {if (other.sex != null)return false;} else if (!sex.equals(other.sex))return false;return true;}}//测试:
package july.star.equals;/*** 测试重写equals方法* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月14日 下午7:09:29* @version 1.0*/
public class Demo {public static void main(String[] args) {Student s1 = new Student("一菲",23,"女");Student s2 = new Student("一菲",23,"女");System.out.println(s1 == s2);  //false 地址值不同,所以为falseStudent s3 = s1;   //地址引用,指向同一个地址System.out.println( s1 == s3);  //true //false:this==obj 也是对地址的比较,所以要重写equalsSystem.out.println(s1.equals(s2));  //falseSystem.out.println(s1.equals(s3));  //trueSystem.out.println("--------------");Student s4 = new Student("左莫",24,"男");//重写后System.out.println(s1.equals(s2));  //trueSystem.out.println(s1.equals(s3));    //trueSystem.out.println(s1.equals(s4));    //falseDemo d = new Demo();System.out.println(s1.equals(d));  //false 判断是否为同一个对象}}

equals方法重写详解相关推荐

  1. java中equals方法重写详解(彻底搞定)

    首先上案例: public static void main(String[] args){String str1 = "abc";String str2 = "abc& ...

  2. java方法重写[详解]

    1. 什么是重写? 重写(overwrite,override),指子类中出现了与父类一模一样的方法,仅对非static方法有效 子类继承父类后,可以对父类中同名同参的方法进行覆盖操作 2.应用: 当 ...

  3. java servlet init方法_JSP开发Servlet重写init()方法实例详解

    jsp开发servlet重写init()方法实例详解 写一个servlet时,有时需要我们重写该servlet的初始化方法,然后,究竟是重写init(servletconfig config),还是重 ...

  4. java condition详解_Java使用Condition控制线程通信的方法实例详解

    Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...

  5. nvme固态硬盘开机慢_别让谣言害了你!关于固态硬盘的谣言以及使用误区 NVMe固态硬盘卡慢怎么办 NVMe固态硬盘卡慢解决方法【详解】-宝商在线...

    凭借高速特性,固态硬盘逐步取代机械硬盘已是大势所趋,关于固态硬盘的话题,自然也就多了起来.今天装机之家小编就来告诉大家,关于固态硬盘的谣言以及使用误区,来看看你中招了没 [误区一:想中毒,哪有这么容易 ...

  6. Java的JVM运行时栈结构和方法调用详解

    详细介绍了Java 的JVM的运行时栈结构,以及和方法调用详解,包括解析调用和分派调用. JVM对于方法的执行是基于栈的,方法调用--入栈,方法调用完毕--出栈,了解JVM的运行时栈结构,有助于我们更 ...

  7. java 获取用户的MAC地址多种方法实例详解

    java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...

  8. JS 中 valueOf() 方法的详解

    JS 中 valueOf() 方法的详解 JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身.通常由JavaScript内部调用,而不是在 ...

  9. golang导入git包_使用go module导入本地包的方法教程详解

    go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...

最新文章

  1. BitCask 持久化hash存储引擎 原理介绍
  2. WMI技术介绍和应用——VC开发WMI应用的基本步骤
  3. 7个Debug linux程序的Strace 列子
  4. HSQL入门及使用指南
  5. FPGA之道(25)VHDL数据类型转换函数与数据对象的属性
  6. 使用SVCUtil.exe生成客户端代理类和配置文件
  7. [jquery]if条件句
  8. 显卡显存故障检测工具_【硬件资讯】1660super实锤!更换DDR6显存!带宽超1660ti!...
  9. 2021-02-21 Python Easyocr 图片文字识别
  10. fatal: The current branch dev has no upstream branch. To push the current branch and set the remote
  11. Linux安装FTP服务-----vsftpd
  12. Web测试到底是在测什么(资料合集)
  13. 微软Skype Translator将支持阿拉伯语即时语音翻译
  14. angularJS中,怎么阻止事件冒泡
  15. 谁将拥有移动互联网的下一个机会?…
  16. codechef FEB19 Manhattan Rectangle
  17. C语言课程设计:课程管理系统
  18. SQL server2008 安装教程
  19. windows下强制删除文件
  20. 百度wz开户竞价推广如何做到降低平均点击价格

热门文章

  1. 甲骨文预言机平台(2)OCI 系统架构
  2. 【Flask】Request和RequestParser类
  3. 深度学习arm MMU一篇就够了
  4. 6-PSCI Power Domain Tree Structure
  5. [Issue Fixed]-GCC编译[-Werror,-Wformat]
  6. (62)时钟中断切换线程,时间片管理, KiDispatchInterrupt
  7. (35)3环PEB断链
  8. 【网络安全员】需要了解的一项攻击技术-高隐匿、高持久化威胁
  9. Windows保护模式学习笔记(一)—— 段寄存器GDT表
  10. C. Woodcutters【贪心】