日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

終結篇:==和equals有什么區別?

來源: 責編: 時間:2023-12-15 09:50:14 238觀看
導讀== 和 equals 有什么區別?這個問題本身不難,但是被問到的頻率很高,且大部分人的回答都不夠全面,讓人聽了有種“恨鐵不成鋼”的感覺,所以今天咱們就來好好聊聊這個問題。1.典型回答對于 Object 來說,其 equals 方法底層實現

== 和 equals 有什么區別?這個問題本身不難,但是被問到的頻率很高,且大部分人的回答都不夠全面,讓人聽了有種“恨鐵不成鋼”的感覺,所以今天咱們就來好好聊聊這個問題。WGT28資訊網——每日最新資訊28at.com

1.典型回答

對于 Object 來說,其 equals 方法底層實現就是“==”,如下 JDK 的 Object 源碼如下:WGT28資訊網——每日最新資訊28at.com

public boolean equals(Object obj) {return (this == obj);}

也就是說,對于 Object 對象來說,equals 和 == 都是一樣的,都是比較對象的引用是否相同。但是,在 JDK 中的其他類中通常會重寫 equals 以實現具體的值比較,例如 Integer 中的 equals 和 String 中的 equals 等,如下源碼所示。 Integer 中的 equals 實現源碼如下:WGT28資訊網——每日最新資訊28at.com

public boolean equals(Object obj) {if (obj instanceof Integer) {    return value == ((Integer)obj).intValue();}return false;}

從上述源碼可以看出,Integer 中會先將 Integer 對象轉換成基礎類型 int 值來進行比較,所以此時就不再是對比兩個對象的引用了,而是對比兩個對象的值是否相等。 String 中的 equals 實現源碼如下:WGT28資訊網——每日最新資訊28at.com

public boolean equals(Object anObject) {if (this == anObject) { // 引用相同返回 true,引用相同,那么值肯定相同了    return true;}return (anObject instanceof String aString)&& (!COMPACT_STRINGS || this.coder == aString.coder)&& StringLatin1.equals(value, aString.value); // equals 為下面的 equals 方法}@IntrinsicCandidatepublic static boolean equals(byte[] value, byte[] other) {    if (value.length == other.length) {        for (int i = 0; i < value.length; i++) { // 循環每個字符對比,本質是值比較            if (value[i] != other[i]) {                return false;            }        }        return true;    }    return false;}

從 String 中的 equals 中可以看出,它和 Integer 一樣,是將 Object 中的引用比較重寫成了值比較了。WGT28資訊網——每日最新資訊28at.com

2.考點分析

所以,對于 Object 來說,== 和 equals 都是一樣的,都是用來對比兩個對象的引用是否相同的,而其他 Java 中的類中,如 String 或 Integer 等,通常都會重寫 equals 讓其變為比較具體的值是否相同,而非引用是否相同。 所以,我們通常會使用 == 來對比兩個對象的引用是否相同,而使用 equals 對比兩個值是否相同(前提條件是重寫了 equals 方法)。WGT28資訊網——每日最新資訊28at.com

3.知識擴展

如果我們自定義一個類,并且想和 Integer 或 String 中的 equals 一樣,用其對比值而非引用是否相同的實現代碼如下:WGT28資訊網——每日最新資訊28at.com

public class Person {    private String name;    private int age;    // 忽略構造方法和 Getter、Setter 方法......    @Override    public boolean equals(Object obj) {        if (this == obj) {            return true;        }        if (obj == null || getClass() != obj.getClass()) {            return false;        }        Person other = (Person) obj;        return this.age == other.age && this.name.equals(other.name);    }}

小結

對于 Object 來說,equals 是用 == 實現的,所以二者是相同的,都是用來比較兩個對象的引用是否相同的,但 Java 中的其他類,都會重寫 equals 讓其變為值比較,而非引用比較,如 Integer 和 String 都是這樣。WGT28資訊網——每日最新資訊28at.com


WGT28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-46339-0.html終結篇:==和equals有什么區別?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 7k Star,一款開源的 Kafka 管理平臺,功能齊全、頁面美觀!

下一篇: Shortcuts-Android應用程序的快捷方式

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 西丰县| 子长县| 北票市| 丰县| 涟水县| 呼图壁县| 民县| 商南县| 鹤壁市| 苗栗县| 高要市| 宝清县| 通海县| 承德县| 沂南县| 修文县| 时尚| 北宁市| 宜兴市| 宁波市| 颍上县| 临朐县| 含山县| 宜春市| 海南省| 洪湖市| 通山县| 铅山县| 绍兴县| 平谷区| 共和县| 汶川县| 阳春市| 卢龙县| 双峰县| 海伦市| 海口市| 隆德县| 许昌县| 循化| 广南县|