Java學習筆記之equals和Objects.equals


  equals 相信大家就知道,就是比較,我們平時也會在自己定義的類中加入自己重寫的equals用來比較兩個類是否相同,例如這樣

public class Person {
    private String name; //姓名
    private int age; //年齡
    private String nickName; //昵稱
    
    public Person(String name,int age,String nickName){
        this.name = name;
        this.age = age;
        this.nickName = nickName;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    
    //比較方法
    public boolean equals(Person p){
        return this.name.equals(p.name)&& this.age==p.age && this.nickName.equals(p.nickName);
    }
}
然后比較的時候就這樣用
public class Main {

    public static void main(String[] args) {
        
        Person p1 = new Person("張三",14,"三狗子");
        Person p2 = new Person("張三",14,"三狗子");
        
        if(p1.equals(p2)){
            System.out.println("一樣");
        }else{
            System.out.println("不一樣");
        }
    }
}

但是我們大多數會用來比較兩個字符串之間是否一樣,例如上面Person類中的equals方法中的this.name.equals(name)這里的equals是調用java的api,但這里有個問題例如如果name是null怎么辦?

這樣的話我們就不得不修改下代碼改成這樣

//比較方法
    public boolean equals(Person p){
        return Objects.equals(this.name,p.name) && this.age == p.age && Objects.equals(this.nickName, p.nickName);
    }

這樣就可以避免null的尷尬了。

解釋:

為了防備name或者nickName可能為null的情況,需要使用Objects.equals方法,如果兩個參數都為null,Objects.equals(a,b)調用將返回true;如果其中一個參數為null則返回false;否則,如果兩個參數都不為null的話,則調用a.equals(b)就可以了。

 

學習記錄,如果錯誤請指正謝謝!



 


免責聲明!

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



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