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)就可以了。
?
學習記錄,如果錯誤請指正謝謝!
?