equals方法重写详解
来源:互联网 发布:不用网络的赛车游戏 编辑:程序博客网 时间:2024/05/17 04:50
/**首先要新建一个类,定义成员变量,通过重写 * 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; } //第一步分析 /*@Override public 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 -- s2 if(this.age == s.age && this.name.equals(s.name) && this.sex.equals(s.sex)){ return true; }else{ return false; } }*/ //第二步优化/* @Override public 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() @Override public 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; } //第三步 @Override public 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.Student return 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 地址值不同,所以为false Student s3 = s1; //地址引用,指向同一个地址 System.out.println( s1 == s3); //true //false:this==obj 也是对地址的比较,所以要重写equals System.out.println(s1.equals(s2)); //false System.out.println(s1.equals(s3)); //true System.out.println("--------------"); Student s4 = new Student("左莫",24,"男"); //重写后 System.out.println(s1.equals(s2)); //true System.out.println(s1.equals(s3)); //true System.out.println(s1.equals(s4)); //false Demo d = new Demo(); System.out.println(s1.equals(d)); //false 判断是否为同一个对象 } }
0 0
- equals方法重写详解
- 重写equals时还必须重写hashcode方法,详解
- 重写equals时还必须重写hashcode方法,详解
- 重写equals方法时都要重写equals方法
- 重写equals()方法
- 重写equals()方法
- JAVA重写equals方法
- JAVA重写equals方法
- 重写Equals()方法
- equals方法重写
- 重写 equals 方法
- java 重写equals方法
- 重写equals()方法简介
- 重写equals方法
- 重写equals方法
- 重写equals方法
- 重写equals方法
- 怎么样重写equals方法
- 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(下篇)
- html总结
- 模拟控制文件全部丢失与归档日志文件丢失的不完全恢复
- tomcat 内存溢出
- 二:Java语言基础组成—— 标识符
- equals方法重写详解
- 软件设计是怎样炼成的(7)——细节决定成败(详细设计)
- 大端机和小端机区别
- HTML 固定div于页面固定位置,实现悬浮按钮。
- QT开发之多线程
- java基础-Stringbuffer转义字符
- 计算组合数
- 1613-3-傅溥衍 总结《2016年12月14日》【连续第七十五天总结】
- 软件设计是怎样炼成的(8)——用户感觉好才是真的好(用户体验设计)