Java對象相等判斷


你是誰啊?你是不是我??(⊙_⊙)?

我們知道比較對象相等可以使用equal方法(來至Object對象的方法)

但是你打開Object的equal方法你會發現:

public boolean equals(Object obj) {
        return (this == obj);
}

現在我們有一個Student類

public class Student  {
	private String name ;
	private int age;
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

如果我們使用默認的方法判斷stu1和stu2兩個對象,得到的結果是false,因為equals==是判斷兩個對象的內存地址

public class Hello {
	public static void main(String[] args) {
		Student stu1 = new Student("小明",18);
		Student stu2 = new Student("小明",18);
		
		System.out.println(stu1.equals(stu2));//false
		System.out.println(stu1==stu2);//false
	}
}

我怎么讓你知道我就是你?

如果要讓equals比較的不是內存地址而是兩個對象的對容就要對equals方法進行重寫(這里使用Eclipse自動的生成方法)

public class Student  {
	private String name ;
	private int age;
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			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;
		return true;
	}
		
}

這里重寫了equals方法和hashCode方法,為啥子還要重寫equals方法,這個...這個o_o ...后面再說。
我們看到重寫的equals方法比較了兩個對象的屬性是否相等,屬性都相等就認為是同一個對象了。讓我們再次測試剛才的相等判斷。

public class Hello {
	public static void main(String[] args) {
		Student stu1 = new Student("小明",18);
		Student stu2 = new Student("小明",18);
		
		System.out.println(stu1.equals(stu2));//ture
		System.out.println(stu1==stu2);//false
		System.out.println(stu1.hashCode());
		System.out.println(stu2.hashCode());
	}
}

結果:

true
false
758222
758222

可以看到兩個對象進行equals判斷結果已經為true了。同時兩個對象也擁有相同的hashCode值,但是為啥要重寫hashCode方法,這個hashCode值有啥用呢?

Object中的equals方法解釋

其他解釋參考:
淺談Object的hashCode方法的作用
為什么HashCode對於對象如此的重要


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM