equals方法


1、==如果作用於基本數據類型,則比較的是值是否相等;

   如果作用於引用類型,則比較的是變量所指向的對象的地址

2、對於非String、Date類型equals比較的是引用類型的變量所指向的對象的地址

  但對於String、Date類型,在其類中重寫了equals(),所以比較的是值

3、Object類型相等判斷為什么重寫equals()和hashcode()

  equals()方法是比較兩個對象的內存地址是否相等,如果不重寫,顯然兩個對象由於不同存儲地址所以是不相等的  

package nio;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ListTest {

    public static void main(String[] args) {
        Person p1 = new Person(10, "張三");
        Person p2 = new Person(10, "張三");
        System.out.println(p1.equals(p2));
        System.out.println(p1.hashCode()==p2.hashCode());
        
    }
    
}

class Person {
    int age;
    String name;

    public Person(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {  //重寫equals方法
        boolean flag=false;
        if(this==obj) {
            flag=true;
        }
        if(null != obj) {
            Person other=(Person) obj;   //對象轉化為person類型對象
            if((age==other.age) && (name==other.name)){
                flag=true;
            }
        }
        
        return flag;
    }

    @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;
    }
}

如果不重寫equals方法則 System.out.println(p1.equals(p2))返回false
如果不重寫hashcode方法則System.out.println(p1.hashCode()==p2.hashCode())返回false
View Code

 

 

4、重寫equals()為什么一定要重寫hashcode()

  如果兩個對象判斷相等只重寫了euqals()方法,而沒有重寫hashcode()方法,雖然p1.equals(p2)結果是true,但執行p1.hashCode()==p2.hashCode()結果卻是false,這與“兩個對象相等,其hashcode必然相等”矛盾,所以重寫了equals()必然需要重寫hashcode()

  hashcode()判斷是equals()判斷的先決條件,所以對象重寫了equals()需要重寫hashcode()


免責聲明!

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



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