国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

你還在用Object.equals()方法嗎?

這篇具有很好參考價(jià)值的文章主要介紹了你還在用Object.equals()方法嗎?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

當(dāng)《阿里巴巴Java開發(fā)手冊(cè)》發(fā)布后,我也是仔細(xì)進(jìn)行了閱讀,想從中找出一些“標(biāo)準(zhǔn)”,讓自己的代碼質(zhì)量提高。手冊(cè)中對(duì) Objectequals 方法的使用進(jìn)行了強(qiáng)制,而且推薦使用 JDK7 中工具類 Objectsequals 方法,至此之后我就很少使用 Object.equals() 方法了。


一、Java開發(fā)手冊(cè)說明

在第一章:編程規(guī)約 -> 第四節(jié):OOP規(guī)約 -> 第6條內(nèi)容如下圖:

你還在用Object.equals()方法嗎?

這里說 Object.equals() 方法容易拋空指針異常,空指針異常相信大家并不陌生,應(yīng)該使用確定有值的對(duì)象來調(diào)用 equals() 方法,不能無中生有,不能從 null 調(diào)用方法,還舉了正例與反例。最后推薦使用 Objects.equals() 方法。

二、Object.equals()方法

Object.equals() 方法是 Java 語言中的一個(gè)基礎(chǔ)方法,用來比較兩個(gè)對(duì)象是否相等。以下是它的源代碼實(shí)現(xiàn):

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

這個(gè)方法的實(shí)現(xiàn)非常簡(jiǎn)單,它首先用引用比較來檢查傳遞給它的參數(shù)對(duì)象是否是當(dāng)前對(duì)象本身,如果是,則返回 true,表示兩個(gè)對(duì)象相等。否則,它返回 false,表示兩個(gè)對(duì)象不相等。

我們需要注意的是,Objectequals() 方法是根據(jù)對(duì)象的引用來判斷兩個(gè)對(duì)象是否相等的,而不是根據(jù)對(duì)象的內(nèi)容。如果我們要比較兩個(gè)對(duì)象的內(nèi)容是否相等,我們需要重寫 equals() 方法,這樣就可以根據(jù)對(duì)象的具體內(nèi)容來判斷它們是否相等了。

比如 Java 中的字符串類 String 就是通過重寫 equals() 方法來實(shí)現(xiàn)字符串內(nèi)容的比較的。例如,以下代碼比較兩個(gè)字符串的內(nèi)容是否相等:

String str1 = new String("你好");
String str2 = new String("你好");

// 比較兩個(gè)字符串的內(nèi)容是否相等
if(str1.equals(str2)) {
    System.out.println("這兩個(gè)字符串內(nèi)容相等。");
}
else {
    System.out.println("這兩個(gè)字符串內(nèi)容不相等");
}

執(zhí)行結(jié)果為:

這兩個(gè)字符串內(nèi)容相等。

三、Objects.equals()方法

Java 中的 Objects.equals() 方法實(shí)際上是由 Java 中的 Objects 類提供的靜態(tài)方法,以下是它的源代碼:

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

這個(gè)方法的實(shí)現(xiàn)非常簡(jiǎn)潔,它首先通過引用比較來檢查傳遞給它的兩個(gè)對(duì)象是否相同。如果相同,它直接返回 true。否則,它進(jìn)一步檢查第一個(gè)參數(shù)是否為 null,如果為 null,則返回 false。否則,它調(diào)用第一個(gè)參數(shù)的 equals() 方法來比較兩個(gè)對(duì)象的內(nèi)容是否相同。

我們需要注意的是,這個(gè)方法中使用的是邏輯或運(yùn)算符(||)。首先檢查第一個(gè)條件是否為 true,只有當(dāng)?shù)谝粋€(gè)條件為 false 時(shí)才會(huì)執(zhí)行第二個(gè)條件。這種方式在 Java 中有時(shí)被稱為 "short-circuiting"。這里也就是短路或,這種技巧可以用來提高代碼的效率,避免執(zhí)行不必要的操作。

Objects.equals() 方法是 Java 中用于比較兩個(gè)對(duì)象是否相等的一個(gè)實(shí)用工具方法,它可以處理對(duì)象為 null 的情況,避免了因?qū)ο鬄?null 而產(chǎn)生 NullPointerException 的問題。具體來說,如果兩個(gè)參數(shù)都是 null,則返回 true;如果一個(gè)參數(shù)是 null 而另一個(gè)不是 null,則返回 false;否則,調(diào)用第一個(gè)參數(shù)的 equals 方法進(jìn)行比較。這樣就避免了空指針異常了。

四、Objects.equals()和Object.equals()

Java 中的 Objects.equals()Object.equals() 方法都用于比較兩個(gè)對(duì)象是否相等,但是它們之間還是有一些差異的。

  • 對(duì)比 null 值:Objects.equals() 方法可以比較 null 值,而 Object.equals() 方法不能比較 null 值,如果比較 null 值,將會(huì)拋出 NullPointerException。

  • 實(shí)現(xiàn)原理:Objects.equals() 方法內(nèi)部調(diào)用的是第一個(gè)對(duì)象的 equals() 方法進(jìn)行比較,如果第一個(gè)對(duì)象為 null,則直接返回與第二個(gè)對(duì)象比較的結(jié)果。而 Object.equals() 方法直接比較兩個(gè)對(duì)象的引用是否相同。

  • 參數(shù)類型:Objects.equals() 方法的兩個(gè)參數(shù)可以是任意類型,而 Object.equals() 方法的參數(shù)必須是 Object 類型。


總結(jié)

建議使用 JDK7 中工具類 Objectsequals 方法。


關(guān)注公眾號(hào):編程火箭車
我們定期發(fā)布編程相關(guān)的文章、資訊、活動(dòng)等內(nèi)容。幫助編程愛好者、初學(xué)者或初級(jí)程序員快速入門、打牢基礎(chǔ)。歡迎大家關(guān)注,和我們一起探索編程的精彩世界。文章來源地址http://www.zghlxwxcb.cn/news/detail-473351.html

到了這里,關(guān)于你還在用Object.equals()方法嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React 你還在用 Redux 嗎?更簡(jiǎn)化的狀態(tài)管理工具(Recoil)

    React 你還在用 Redux 嗎?更簡(jiǎn)化的狀態(tài)管理工具(Recoil)

    以往傳統(tǒng)的 Redux 狀態(tài)管理工具使用起來代碼太過于復(fù)雜。 你需要通過純函數(shù)觸發(fā) action 再去修改 data 中定義的數(shù)據(jù),而且要通過接口請(qǐng)求數(shù)據(jù)還需要借助 redux - think 這個(gè)中間件才能完成。。。 更加方便使用的工具:Recoil ~? ?由 facebook 推出契合 React 的狀態(tài)管理 它的定義方式

    2024年02月06日
    瀏覽(25)
  • 記錄--你還在用傳統(tǒng)輪播組件嗎?來看看遮罩輪播組件

    記錄--你還在用傳統(tǒng)輪播組件嗎?來看看遮罩輪播組件

    最近有一個(gè)頁面改版的需求,在UI走查階段,設(shè)計(jì)師說原來的輪播組件和新版頁面UI整體風(fēng)格不搭,所以要換掉。 這里就涉及到兩種輪播組件,一種是傳統(tǒng)的輪播組件,一種是設(shè)計(jì)師要的那種。 傳統(tǒng)的輪播組件,大家都見過,原理也清楚,就是把要輪播的圖片橫向排成一個(gè)隊(duì)

    2024年02月17日
    瀏覽(21)
  • 你還在用 Postman?IDEA REST Client 好用到爆,Postman 可以扔了

    你還在用 Postman?IDEA REST Client 好用到爆,Postman 可以扔了

    語法部分 演示POST請(qǐng)求 POST {{baseUrl}}}get?show_env=1 Accept: application/json { “name”:“a” } 演示GET請(qǐng)求 GET {{baseUrl}}}/post Content-Type: application/x-www-form-urlencoded id=999value=content 首先通過###三個(gè)井號(hào)鍵來分開每個(gè)請(qǐng)求體,然后請(qǐng)求url和header參數(shù)是緊緊挨著的,請(qǐng)求參數(shù)不管是POST的body傳參

    2024年04月12日
    瀏覽(20)
  • Java 你還在用list.contain做去重? 你是故意的還是不小心的?

    Java 你還在用list.contain做去重? 你是故意的還是不小心的?

    最近又是一輪代碼review , 發(fā)現(xiàn)了一些實(shí)現(xiàn)去重的代碼,在使用 lsit.contain ...... 如: 我沉思,是不是其實(shí)很多初學(xué)者也存在這種去重使用問題? 所以我選擇把這個(gè)事情整出來,分享一下。 首先是造出一個(gè) ListString 模擬數(shù)據(jù),一共2W條,里面有一半數(shù)據(jù)1W條是重復(fù)的: 先看看 我們

    2024年02月14日
    瀏覽(20)
  • 【優(yōu)雅的參數(shù)驗(yàn)證@Validated】@Validated參數(shù)校驗(yàn)的使用及注解詳解——你還在用if做條件驗(yàn)證?

    【優(yōu)雅的參數(shù)驗(yàn)證@Validated】@Validated參數(shù)校驗(yàn)的使用及注解詳解——你還在用if做條件驗(yàn)證?

    請(qǐng)先看看下面代碼:(簡(jiǎn)單舉個(gè)例子,代碼并不規(guī)范) 以上代碼主要是為了對(duì)用戶user實(shí)體進(jìn)行條件驗(yàn)證。 但是那么多的if, 寫得純純得小白一個(gè),也使得代碼顯得臃腫不美觀不優(yōu)雅! 接下來,讓我們學(xué)習(xí)使用優(yōu)雅的參數(shù)驗(yàn)證@Validated! @Valid和@Validated是Spring Validation框架提供

    2024年02月02日
    瀏覽(29)
  • Object.equals 和 String.equals的區(qū)別

    一.? 源碼展示: 1. Object.equals: ①引用類型地址值比較,直接返回結(jié)果:true || false ? 2. String.equals: ① 判斷地址值是否相等,若相等 返回 true,若不等則進(jìn)入下列判斷 ; ② 判斷參數(shù)是否為String類型,若不是 返回false,若是則進(jìn)入下列判斷; ③ 判斷字符串長(zhǎng)度是否相等,若不

    2024年02月13日
    瀏覽(26)
  • 正確使用 equals 方法

    Object的equals方法容易拋空指針異常,應(yīng)使用常量或確定有值的對(duì)象來調(diào)用 equals。 舉個(gè)例子: 運(yùn)行上面的程序會(huì)拋出空指針異常,但是我們把第二行的條件判斷語句改為下面這樣的話,就不會(huì)拋出空指針異常,else 語句塊得到執(zhí)行。: 不過更推薦使用 java.util.Objects#equals (JDK

    2024年02月14日
    瀏覽(22)
  • Java中的equals方法

    Java中的equals方法

    \\\"==\\\"是一個(gè)比較運(yùn)算符。 \\\"==\\\"既可以判斷基本類型,又可以判斷引用類型。 \\\"==\\\"如果判斷基本類型,判斷的是值是否相等。eg: int i=10; double d=10.0 \\\"==\\\"如果判斷引用類型,判斷的是地址是否相等,即判定是不是同一個(gè)對(duì)象。 equals是object類中的方法,只能用于判斷 引用類型 。 equa

    2024年02月03日
    瀏覽(20)
  • equals方法的用法(java)

    equals 和 == 易錯(cuò)使用案例集合

    2024年02月16日
    瀏覽(19)
  • “==“和equals方法究竟有什么區(qū)別?

    ==操作符專門用來比較兩個(gè)變量的值是否相等,也就是用于比較變量所對(duì)應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,只能用 ==操作符。 如果一個(gè)變量指向的數(shù)據(jù)是對(duì)象類型的,那么,這時(shí)候涉及了兩塊內(nèi)存,對(duì)象本身占用一塊內(nèi)

    2023年04月17日
    瀏覽(75)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包