equals方法重写详解
生活随笔
收集整理的這篇文章主要介紹了
equals方法重写详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/**首先要新建一個類,定義成員變量,通過重寫* 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) {*//*** 這里要改進(jìn),根據(jù)這里的比較成員變量來決定返回true還是false* 這里其實(shí)要比較的就是name,age和sex* 但是,name是String類型的,而String是引用類型的,所以,在這里不能直接用==比較,* 應(yīng)該用equals()比較* this -- s1* obj -- s2*//*if(obj == null){return false;}//要使用的是學(xué)生類的特有成員,所以要向下轉(zhuǎn)型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;}}*///第二步優(yōu)化
/* @Overridepublic boolean equals(Object obj) {//為了提高效率if(this == obj){return true;}//為了提供程序的健壯性//我先判斷一下,obj是不是學(xué)生的一個對象,如果是,再做向下轉(zhuǎn)型,如果不是,直接返回false//這個時候,我們要判斷的是對象是否是某個類的對象?if (!(obj instanceof Student)) {return false;}//如果是就繼續(xù)Student s = (Student)obj;System.out.println("同一個對象,還需要向下轉(zhuǎn)型比較嗎?");return this.name.equals(s.name)&&this.age==s.age&&this.sex.equals(s.sex);}*///重寫equals要實(shí)現(xiàn)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; //向下轉(zhuǎn)型/** 判斷成員變量是否一樣 */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 判斷是否為同一個對象}}
總結(jié)
以上是生活随笔為你收集整理的equals方法重写详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个对象的内存图及运行流程和3个对象的内
- 下一篇: 选择排序由浅到深详细分析和图解