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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

終結(jié)篇:==和equals有什么區(qū)別?

來(lái)源: 責(zé)編: 時(shí)間:2023-12-15 09:50:14 256觀看
導(dǎo)讀== 和 equals 有什么區(qū)別?這個(gè)問(wèn)題本身不難,但是被問(wèn)到的頻率很高,且大部分人的回答都不夠全面,讓人聽(tīng)了有種“恨鐵不成鋼”的感覺(jué),所以今天咱們就來(lái)好好聊聊這個(gè)問(wèn)題。1.典型回答對(duì)于 Object 來(lái)說(shuō),其 equals 方法底層實(shí)現(xiàn)

== 和 equals 有什么區(qū)別?這個(gè)問(wèn)題本身不難,但是被問(wèn)到的頻率很高,且大部分人的回答都不夠全面,讓人聽(tīng)了有種“恨鐵不成鋼”的感覺(jué),所以今天咱們就來(lái)好好聊聊這個(gè)問(wèn)題。OZk28資訊網(wǎng)——每日最新資訊28at.com

1.典型回答

對(duì)于 Object 來(lái)說(shuō),其 equals 方法底層實(shí)現(xiàn)就是“==”,如下 JDK 的 Object 源碼如下:OZk28資訊網(wǎng)——每日最新資訊28at.com

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

也就是說(shuō),對(duì)于 Object 對(duì)象來(lái)說(shuō),equals 和 == 都是一樣的,都是比較對(duì)象的引用是否相同。但是,在 JDK 中的其他類中通常會(huì)重寫(xiě) equals 以實(shí)現(xiàn)具體的值比較,例如 Integer 中的 equals 和 String 中的 equals 等,如下源碼所示。 Integer 中的 equals 實(shí)現(xiàn)源碼如下:OZk28資訊網(wǎng)——每日最新資訊28at.com

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

從上述源碼可以看出,Integer 中會(huì)先將 Integer 對(duì)象轉(zhuǎn)換成基礎(chǔ)類型 int 值來(lái)進(jìn)行比較,所以此時(shí)就不再是對(duì)比兩個(gè)對(duì)象的引用了,而是對(duì)比兩個(gè)對(duì)象的值是否相等。 String 中的 equals 實(shí)現(xiàn)源碼如下:OZk28資訊網(wǎng)——每日最新資訊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++) { // 循環(huán)每個(gè)字符對(duì)比,本質(zhì)是值比較            if (value[i] != other[i]) {                return false;            }        }        return true;    }    return false;}

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

2.考點(diǎn)分析

所以,對(duì)于 Object 來(lái)說(shuō),== 和 equals 都是一樣的,都是用來(lái)對(duì)比兩個(gè)對(duì)象的引用是否相同的,而其他 Java 中的類中,如 String 或 Integer 等,通常都會(huì)重寫(xiě) equals 讓其變?yōu)楸容^具體的值是否相同,而非引用是否相同。 所以,我們通常會(huì)使用 == 來(lái)對(duì)比兩個(gè)對(duì)象的引用是否相同,而使用 equals 對(duì)比兩個(gè)值是否相同(前提條件是重寫(xiě)了 equals 方法)。OZk28資訊網(wǎng)——每日最新資訊28at.com

3.知識(shí)擴(kuò)展

如果我們自定義一個(gè)類,并且想和 Integer 或 String 中的 equals 一樣,用其對(duì)比值而非引用是否相同的實(shí)現(xiàn)代碼如下:OZk28資訊網(wǎng)——每日最新資訊28at.com

public class Person {    private String name;    private int age;    // 忽略構(gòu)造方法和 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);    }}

小結(jié)

對(duì)于 Object 來(lái)說(shuō),equals 是用 == 實(shí)現(xiàn)的,所以二者是相同的,都是用來(lái)比較兩個(gè)對(duì)象的引用是否相同的,但 Java 中的其他類,都會(huì)重寫(xiě) equals 讓其變?yōu)橹当容^,而非引用比較,如 Integer 和 String 都是這樣。OZk28資訊網(wǎng)——每日最新資訊28at.com


OZk28資訊網(wǎng)——每日最新資訊28at.com

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 7k Star,一款開(kāi)源的 Kafka 管理平臺(tái),功能齊全、頁(yè)面美觀!

下一篇: Shortcuts-Android應(yīng)用程序的快捷方式

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • Redmi Buds 4開(kāi)箱簡(jiǎn)評(píng):才199還有降噪 可以無(wú)腦入

    在上個(gè)月舉辦的Redmi Note11T Pro系列新機(jī)發(fā)布會(huì)上,除了兩款手機(jī)新品之外,Redmi還帶來(lái)了兩款TWS真無(wú)線藍(lán)牙耳機(jī)產(chǎn)品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們?cè)赗edmi Note11T
  • 7月安卓手機(jī)性能榜:紅魔8S Pro再奪榜首

    7月份的手機(jī)市場(chǎng)風(fēng)平浪靜,除了紅魔和努比亞帶來(lái)了兩款搭載驍龍8Gen2領(lǐng)先版處理器的新機(jī)之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機(jī)廠商修整的時(shí)間,進(jìn)入8月份之
  • 掘力計(jì)劃第 20 期:Flutter 混合開(kāi)發(fā)的混亂之治

    在掘力計(jì)劃系列活動(dòng)第20場(chǎng),《Flutter 開(kāi)發(fā)實(shí)戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負(fù)責(zé)人戀貓的小郭分享了Flutter 混合開(kāi)發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • Java NIO內(nèi)存映射文件:提高文件讀寫(xiě)效率的優(yōu)秀實(shí)踐!

    Java的NIO庫(kù)提供了內(nèi)存映射文件的支持,它可以將文件映射到內(nèi)存中,從而可以更快地讀取和寫(xiě)入文件數(shù)據(jù)。本文將對(duì)Java內(nèi)存映射文件進(jìn)行詳細(xì)的介紹和演示。內(nèi)存映射文件概述內(nèi)存
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問(wèn)我,如何才能學(xué)好IO流,對(duì)各種流的概念,云里霧里的,不求甚解。用到的時(shí)候,現(xiàn)百度,功能雖然實(shí)現(xiàn)了,但是為什么用這個(gè)?不知道。更別說(shuō)效率問(wèn)題了~下次再遇到,
  • 蘋(píng)果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網(wǎng)消息,據(jù)彭博社報(bào)道,在8月3日印度突然禁止在沒(méi)有許可證的情況下向印度進(jìn)口電腦/平板及顯示器等產(chǎn)品后,蘋(píng)果、三星電子和惠普等大公司暫停向印度
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋(píng)果史上最驚艷直屏

    按照慣例,蘋(píng)果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會(huì),有傳言稱發(fā)布會(huì)將于9月12日舉行,屆時(shí)全新的iPhone 15系列將正式與大家見(jiàn)面,不出意外的話
  • “買(mǎi)真退假” 這種“羊毛”不能薅

    □ 法治日?qǐng)?bào) 記者 王春   □ 本報(bào)通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個(gè)大學(xué)生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
  • 北京:科技教育體驗(yàn)基地開(kāi)始登記

      北京“科技館之城”科技教育體驗(yàn)基地登記和認(rèn)證工作日前啟動(dòng)。首批北京科技教育體驗(yàn)基地?cái)M于2023年全國(guó)科普日期間掛牌,后續(xù)還將開(kāi)展常態(tài)化登記。  北京科技教育體驗(yàn)基
Top 主站蜘蛛池模板: 北京市| 齐齐哈尔市| 保康县| 左云县| 金堂县| 永顺县| 茌平县| 城市| 潼关县| 磐安县| 阿克陶县| 张掖市| 长治市| 绥芬河市| 南乐县| 贵州省| 汶川县| 邢台市| 宁津县| 壤塘县| 儋州市| 资兴市| 江口县| 宁国市| 宜黄县| 扬州市| 道真| 兰州市| 新宁县| 沙洋县| 车险| 鄂州市| 股票| 汉寿县| 锡林郭勒盟| 林西县| 将乐县| 富顺县| 安龙县| 麻栗坡县| 赣榆县|