Java---Equals比較的是什麼?觀察源碼寫出比較對象的方法~

Equals方法

  該方法默認比較的是連個對象的地址值是否相等。

   觀察equals的源碼:

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

  比較兩個對象比的是地址沒有意義,一般判斷兩個對象是否相等,比較的是對象的成員,所以我們一般自定義對象都需要重寫equals方法

  如何重寫? – 學習String的equals方法
觀察String重寫equals方法:

class String {
   	private final char value[];
   	"abc".equals("abc");
   	public boolean equals(Object anObject) {
   		"abc" == "abd"
       // 提高了效率
        if (this == anObject) {
            return true;
        }
        // 提高了安全性
        if (anObject instanceof String) {
            String anotherString = (String)anObject; "abd"
            int n = this.value.length; // 3
            if (n == anotherString.value.length) {
                char v1[] = this.value; "abc"
                char v2[] = anotherString.value; "abd"
                int i = 0;
                 while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++; 2
                }
                return true;
            }
        }
        return false;
     }
   }

所以我們可以自己來重寫equals方法,重寫如下

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章