1. 程式人生 > >==和equals的區別和解析。

==和equals的區別和解析。

相等大部分的人 都是知道 : == 號比較比較基本資料型別的值 或 兩個物件的地址值。沒有重寫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了。