==和equals的區別和解析。
阿新 • • 發佈:2018-12-17
相等大部分的人 都是知道 : == 號比較比較基本資料型別的值 或 兩個物件的地址值。沒有重寫equals()方法的類中,呼叫equals()方法其實和使用==號的效果一樣,也是比較的地址值,然而,Java提供的所有類中,絕大多數類都重寫了equals()方法,重寫後的equals()方法一般都是比較兩個物件的值。
但是重寫過equals 方法的人 可能不多。 那麼我們來看看 euqals的方法(來自Object類)的底層:
public boolean equals(Object obj) {
return (this == obj);
}
其實從底層可以看出還是呼叫了==比較。
先定義一個標準Bean. 不重寫equals 方法
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {
}
public Student(int age) {
this.age = age;
}
測試類程式碼:
public class TestEquals { public static void main(String[] args)throws Exception { Student s1 = new Student(11); Student s2 = new Student(11); System.out.println(s1.equals(s2)); //輸出結果是false // 沒重寫的時候 比較的是地址值 } }
重寫equals 方法後的Bean
public class Student { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student() { } public Student(int age) { this.age = age; } //重寫的euqals 方法 @Override public boolean equals(Object obj) { Student elseStudent= (Student) obj; return this.age==elseStudent.age; } }
這時候 輸出結果就是true了。