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