==和equals有什么區別
????????對于基本數據類型,==比較的是值是否相等,對于引用類型則是比較的地址是否相等;對于equals來說,基本數據類型沒有equals方法,對于引用類型equals比較的是引用對象是否相同
那針對以上結論,我們來看看以下代碼:
我們可以看到對于引用對象使用==和equals結果都為false;對于String類型,它的底層默認重寫了equals和hashcode方法,重寫后的equals比較的就是對象的值。
那我們現在重寫Userinfo的equals和hashcode方法,再來進行輸出:
?package com.yinan.entity;?import lombok.*;?import java.io.Serializable;import java.util.Objects;?@Setter@Getter@ToStringpublic class Userinfo implements Serializable {private String username;private int ? password;?public Userinfo() {}?public Userinfo(String username, int password) {this.username = username;this.password = password;}?@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Userinfo userinfo = (Userinfo) o;return password == userinfo.password && Objects.equals(username, userinfo.username);}?@Overridepublic int hashCode() {return Objects.hash(username, password);}}
?@SpringBootTestpublic class JavaBaseTests {?// ? 測試equals和hashcode的區別@Testvoid ?testEqualsAndHashCode() {?Userinfo user1=new Userinfo("yinan",123);Userinfo user2=new Userinfo("yinan",123);boolean res=user1==user2?true:false;System.out.println(res);boolean re=user1.equals(user2);System.out.println(re);}}
這個時候重寫equals方法后就會發現結果變為了true。
總結==和equals的區別:
對于基礎數據類型,==比較的是值是否相等,基礎數據類型沒有equals方法
對于引用類型,==比較的是地址是否相同,equals如果被重寫的話比較的是值是否相同,如果沒有被重寫,則會使用Object里面的equals進行比較他們的地址是否相同