equals方法重写详解
/**首先要新建一个类,定义成员变量,通过重写* 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方法重写详解相关推荐
- java中equals方法重写详解(彻底搞定)
首先上案例: public static void main(String[] args){String str1 = "abc";String str2 = "abc& ...
- java方法重写[详解]
1. 什么是重写? 重写(overwrite,override),指子类中出现了与父类一模一样的方法,仅对非static方法有效 子类继承父类后,可以对父类中同名同参的方法进行覆盖操作 2.应用: 当 ...
- java servlet init方法_JSP开发Servlet重写init()方法实例详解
jsp开发servlet重写init()方法实例详解 写一个servlet时,有时需要我们重写该servlet的初始化方法,然后,究竟是重写init(servletconfig config),还是重 ...
- java condition详解_Java使用Condition控制线程通信的方法实例详解
Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...
- nvme固态硬盘开机慢_别让谣言害了你!关于固态硬盘的谣言以及使用误区 NVMe固态硬盘卡慢怎么办 NVMe固态硬盘卡慢解决方法【详解】-宝商在线...
凭借高速特性,固态硬盘逐步取代机械硬盘已是大势所趋,关于固态硬盘的话题,自然也就多了起来.今天装机之家小编就来告诉大家,关于固态硬盘的谣言以及使用误区,来看看你中招了没 [误区一:想中毒,哪有这么容易 ...
- Java的JVM运行时栈结构和方法调用详解
详细介绍了Java 的JVM的运行时栈结构,以及和方法调用详解,包括解析调用和分派调用. JVM对于方法的执行是基于栈的,方法调用--入栈,方法调用完毕--出栈,了解JVM的运行时栈结构,有助于我们更 ...
- java 获取用户的MAC地址多种方法实例详解
java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...
- JS 中 valueOf() 方法的详解
JS 中 valueOf() 方法的详解 JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身.通常由JavaScript内部调用,而不是在 ...
- golang导入git包_使用go module导入本地包的方法教程详解
go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...
最新文章
- BitCask 持久化hash存储引擎 原理介绍
- WMI技术介绍和应用——VC开发WMI应用的基本步骤
- 7个Debug linux程序的Strace 列子
- HSQL入门及使用指南
- FPGA之道(25)VHDL数据类型转换函数与数据对象的属性
- 使用SVCUtil.exe生成客户端代理类和配置文件
- [jquery]if条件句
- 显卡显存故障检测工具_【硬件资讯】1660super实锤!更换DDR6显存!带宽超1660ti!...
- 2021-02-21 Python Easyocr 图片文字识别
- fatal: The current branch dev has no upstream branch. To push the current branch and set the remote
- Linux安装FTP服务-----vsftpd
- Web测试到底是在测什么(资料合集)
- 微软Skype Translator将支持阿拉伯语即时语音翻译
- angularJS中,怎么阻止事件冒泡
- 谁将拥有移动互联网的下一个机会?…
- codechef FEB19 Manhattan Rectangle
- C语言课程设计:课程管理系统
- SQL server2008 安装教程
- windows下强制删除文件
- 百度wz开户竞价推广如何做到降低平均点击价格
热门文章
- 甲骨文预言机平台(2)OCI 系统架构
- 【Flask】Request和RequestParser类
- 深度学习arm MMU一篇就够了
- 6-PSCI Power Domain Tree Structure
- [Issue Fixed]-GCC编译[-Werror,-Wformat]
- (62)时钟中断切换线程,时间片管理, KiDispatchInterrupt
- (35)3环PEB断链
- 【网络安全员】需要了解的一项攻击技术-高隐匿、高持久化威胁
- Windows保护模式学习笔记(一)—— 段寄存器GDT表
- C. Woodcutters【贪心】