成人深夜视频网站|日韩高清无码久久|中文a√在线天堂|亚洲黄网站在线看|欧美视频 第二页|日本 久草 天堂|高潮无遮挡黄视频|久久一级内射精品|国产操逼一级视频|五月天婷婷色AV

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

代碼中比較兩個對象的內(nèi)容是否相等,使用“==”和Equals?不行!

0
分享至

公司的程序員小高在寫代碼的時候遇到一個問題,問題也很簡單,那就是小高在寫一個參數(shù)配置的頁面的時候,若界面參數(shù)發(fā)生了改變,那么需要彈窗提醒用戶是否保存參數(shù),可這個參數(shù)配置頁面有幾百個參數(shù)需要配置,如果要對所有參數(shù)與數(shù)據(jù)庫的參數(shù)進(jìn)行逐一比對,那可是個大工程,小高嘗試了很多方法,結(jié)果都沒有達(dá)到預(yù)期的效果。

小高寫的參數(shù)配置頁面的原本操作邏輯是編輯完頁面數(shù)據(jù)后,點(diǎn)擊頁面的“返回”按鈕,不管頁面有沒有發(fā)生改變,均彈窗提示用戶是否保存配置的參數(shù)!

當(dāng)我看到小高的做法以后,我覺得小高開始的做法在用戶體驗(yàn)上有點(diǎn)問題,因?yàn)橛脩魜磉@個界面不一定就是要改配置參數(shù),有可能就是看一眼,但每次返回時都要被彈窗詢問是否保存數(shù)據(jù),從用戶角度,這樣的軟件使用體驗(yàn)肯定是有問題的。

所以,我跟小高說,不要每次都彈窗,而是當(dāng)配置發(fā)生變化時再彈窗!小高覺得我說的也有道理,但是,他隨之拋給了我一個問題。

據(jù)小高說,他也不是沒想過按照我的想法去做,但是,如果一個參數(shù)一個參數(shù)去比對,那么光驗(yàn)證參數(shù)是否改動這塊的代碼就有成百上千行,這么寫不光累,代碼可能還不利于維護(hù)。

我問他:“用Equals不行嗎?”

小高跟我說,Equals他試過,即使兩個對象的內(nèi)容完全相等,使用Equals的比對結(jié)果仍然是False!

這讓我有點(diǎn)尷尬了,因?yàn)槲冶凰@么一說,我才想起來,我似乎從來沒有用過Equals!

這得說到我倆的技術(shù)背景,都是C#!

在C#中大多數(shù)情況下,我們都只會使用“==”號來判斷兩個對象的值是否相等,之所以不常使用Equals,那是因?yàn)椤?=”和Equals大部分情況下作用是一樣的,對于值類型而言(比如1、2、3、4、5),因?yàn)橹殿愋投际谴鎯υ跅I?,因此?=”和Equals判斷的都是兩個值類型的值是否相等。而對于引用類型而言,使用“==”就是比對兩個對象之間的棧地址是否相等,使用Equals就是比對兩個對象之間的堆地址是否相等,也就是Equals實(shí)際上比對的是兩個對象是否是對同一個對象的引用。

因此,假設(shè)有一個對象A,此時,如果給B賦值,B=A的情況下,使用Equals來比對,那么A和B是能劃上等號的。

再回到開始的需求,小高在參數(shù)配置頁面點(diǎn)擊“返回”時已經(jīng)將頁面上的數(shù)據(jù)重新new了一個對象,這里我們把這個對象看作B,而每次保存完成以后,需要對原本的參數(shù)對象進(jìn)行重新賦值,這個原本的對象我們看作A,因此B對象(引用類型)的地址和A對象所引用的地址不管對于“==”來說還是Equals來說,其實(shí)比較得都是地址而不是內(nèi)容。因此,這么比的話永遠(yuǎn)是False。

此時,小高找了一堆第三方庫,第三方庫其實(shí)能夠達(dá)到比對內(nèi)容的目的,但是,我把小高的找到的庫逐一看了一遍,無奈本人有強(qiáng)迫癥,非MIT開源協(xié)議的第三方庫,我認(rèn)為都有商業(yè)風(fēng)險(xiǎn),于是,小高找的庫全軍覆沒!

最后,實(shí)在沒辦法,有問題,找百度,我找到了一個比較經(jīng)濟(jì)實(shí)惠又沒有商業(yè)風(fēng)險(xiǎn)的做法,那就是將兩個需要比對的對象直接序列化成為Json字符串,然后拿兩個Json字符串進(jìn)行比對!

這里要說到C#中的字符串(String)類型的特殊之處了!

眾所周知,字符串這個類型在大部分編程語言里,它都是引用類型,在C#里面也是,但是,特殊的地方在于,當(dāng)兩個字符串在進(jìn)行比對的時候,其實(shí)比對的是字符串的值!(大家不用翻論文,總之就是這個意思)

所以,只要兩個Json字符串是一模一樣的,那么不管使用“==”還是使用Equals,得到的結(jié)果均是True,當(dāng)然了,我還是喜歡使用“==”來比對!

結(jié)語

到了這里,小高是算是解決了他所需要解決的問題,但是,我其實(shí)還是覺得不夠完美,可能最佳的解決方案是通過反射兩個對象里面的屬性,然后通過比對屬性的值來判斷兩個對象的內(nèi)容是否相等,但是,這無疑會將問題變得更加復(fù)雜,舉個很簡單的例子,假設(shè)一個對象中包含著另一個對象,而另一個對象又包含著另外一個對象……,而每個對象里面的屬性的數(shù)據(jù)類型可能還不一樣,需要逐一判斷,這無疑增加了代碼的復(fù)雜性,這種偏底層的東西,我是不愿意碰的!

況且,這也背離了我想要使用簡單的方法解決問題的初衷!

但是,我說得不完美,其實(shí)還包含了另外一層意思,因?yàn)槲遗聦ο筠D(zhuǎn)換成Json以后,Json的每一個屬性的位置會在最終轉(zhuǎn)換出來的字符串Json中發(fā)生變化,這樣兩個字符串就變得不相等了。

但是,我嘗試了很多次,發(fā)現(xiàn)無論我怎么轉(zhuǎn)換,最終兩個內(nèi)容完全一樣的不同對象,轉(zhuǎn)換出來的Json串都是一模一樣的。

所以,您認(rèn)為將對象轉(zhuǎn)換成Json后進(jìn)行比對這個方法靠譜嗎?有沒有其他風(fēng)險(xiǎn)呢?

聲明:個人原創(chuàng),僅供參考

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
東風(fēng)41能被攔截?美智庫披露:需35枚攔截彈,失敗代價(jià)是127座城

東風(fēng)41能被攔截?美智庫披露:需35枚攔截彈,失敗代價(jià)是127座城

一個有靈魂的作者
2025-08-31 22:13:53
被羈押滿1年,柯文哲感觸多,不忘韓國瑜,終見識“底層人”生活

被羈押滿1年,柯文哲感觸多,不忘韓國瑜,終見識“底層人”生活

近史博覽
2025-09-04 16:05:17
小時候和鄰家姐姐偷吃“伊甸園禁果”長大后,她又是我的美女上司

小時候和鄰家姐姐偷吃“伊甸園禁果”長大后,她又是我的美女上司

紙鳶奇譚
2025-09-03 15:00:31
看來是天要亡你

看來是天要亡你

我是歷史其實(shí)挺有趣
2025-09-03 09:01:25
湖南新任命1名學(xué)校書記

湖南新任命1名學(xué)校書記

大愛三湘
2025-09-04 12:41:32
iPhone17Pro Max 已提前上架店里,有點(diǎn)野??!

iPhone17Pro Max 已提前上架店里,有點(diǎn)野啊!

科技堡壘
2025-09-04 13:22:07
千億媳婦徐子淇罕登封面,辣妹造型減齡顯年輕,身材顏值相當(dāng)在線

千億媳婦徐子淇罕登封面,辣妹造型減齡顯年輕,身材顏值相當(dāng)在線

農(nóng)村娛樂光哥
2025-09-03 15:12:40
楊蘭蘭賬上的“2700億澳元”,是存的三年期?

楊蘭蘭賬上的“2700億澳元”,是存的三年期?

關(guān)爾東
2025-08-09 17:12:05
姜維的最后一計(jì)為何那么出名,縱觀古今,絕對是“天花板”級別!

姜維的最后一計(jì)為何那么出名,縱觀古今,絕對是“天花板”級別!

銘記歷史呀
2025-09-03 14:19:27
金與正依舊是朝鮮實(shí)權(quán)人物

金與正依舊是朝鮮實(shí)權(quán)人物

周邊問題研究所
2025-09-04 12:53:57
上海通報(bào):楊毅被查!

上海通報(bào):楊毅被查!

魯中晨報(bào)
2025-09-04 15:55:04
安徽熱心女子給被撞倒男孩撐傘,網(wǎng)友卻被男孩顏值驚呆!網(wǎng)友:帥得出事了還以為在擺拍

安徽熱心女子給被撞倒男孩撐傘,網(wǎng)友卻被男孩顏值驚呆!網(wǎng)友:帥得出事了還以為在擺拍

瀟湘晨報(bào)
2025-09-04 13:24:11
100式雙離譜坦克的本質(zhì):以概率學(xué)取勝,不貪大求全!

100式雙離譜坦克的本質(zhì):以概率學(xué)取勝,不貪大求全!

Ck的蜜糖
2025-09-04 11:43:35
演都不演了,直接掏出東風(fēng)-61,美國天天盯著中國,咋就沒發(fā)現(xiàn)

演都不演了,直接掏出東風(fēng)-61,美國天天盯著中國,咋就沒發(fā)現(xiàn)

頭條爆料007
2025-09-03 11:07:57
中國聯(lián)通白皮書曝光國行 eSIM 方案:雙向機(jī)卡鎖定、禁用跨境寫卡

中國聯(lián)通白皮書曝光國行 eSIM 方案:雙向機(jī)卡鎖定、禁用跨境寫卡

不客觀實(shí)驗(yàn)室
2025-09-03 14:49:39
央5直播德約科維奇VS阿爾卡拉斯,誰能打進(jìn)美網(wǎng)決賽?獎金有多少

央5直播德約科維奇VS阿爾卡拉斯,誰能打進(jìn)美網(wǎng)決賽?獎金有多少

體育大學(xué)僧
2025-09-04 09:39:16
男子結(jié)婚13年依然對老婆心動:當(dāng)年彩禮只要1.8萬,自己賺大了

男子結(jié)婚13年依然對老婆心動:當(dāng)年彩禮只要1.8萬,自己賺大了

唐小糖說情感
2025-09-04 10:10:53
汪小菲凌晨為馬筱梅煎牛排,網(wǎng)友:對比汪小菲為大S煎牛排差距大

汪小菲凌晨為馬筱梅煎牛排,網(wǎng)友:對比汪小菲為大S煎牛排差距大

鑫鑫說說
2025-09-04 09:05:00
古人為何規(guī)定筷子7寸6分,且一頭圓一頭方?身為炎黃子孫不得不知

古人為何規(guī)定筷子7寸6分,且一頭圓一頭方?身為炎黃子孫不得不知

大千世界觀
2025-09-01 20:44:30
中國留學(xué)生情侶澳洲偷生娃!10多年父母、朋友全蒙在鼓里!接生竟靠Google搜索...

中國留學(xué)生情侶澳洲偷生娃!10多年父母、朋友全蒙在鼓里!接生竟靠Google搜索...

澳洲紅領(lǐng)巾
2025-09-02 14:28:21
2025-09-04 17:08:49
程序員古耕 incentive-icons
程序員古耕
程序員、網(wǎng)文作家、自媒體人
563文章數(shù) 380關(guān)注度
往期回顧 全部

科技要聞

17999元起!華為發(fā)布三折疊屏手機(jī)新品

頭條要聞

巴西欲拉金磚國家"群聊" 共商應(yīng)對美國關(guān)稅"大棒"

頭條要聞

巴西欲拉金磚國家"群聊" 共商應(yīng)對美國關(guān)稅"大棒"

體育要聞

“他就像是身高2米的梅西”

娛樂要聞

墻倒眾人推!胡歌張譯的仇終于有人報(bào)

財(cái)經(jīng)要聞

科創(chuàng)50指數(shù)跌超6% 算力芯片股大跌

汽車要聞

對話仇雨菁:七年磨一劍,芯馳科技的破局之路

態(tài)度原創(chuàng)

教育
旅游
房產(chǎn)
親子
時尚

教育要聞

南京二十九中、六十六中“新掌門”亮相!

旅游要聞

熱聞|清明假期將至,熱門目的地有哪些?

房產(chǎn)要聞

臨春、桶井、南丁…三亞開啟新一輪大征收!

親子要聞

卵泡不長大是什么原因引起的?dhea和輔酶q10可以都吃嗎?

中年女人穿衣學(xué)會這3招,不扮嫩沒有油膩感,穿出從容和時髦

無障礙瀏覽 進(jìn)入關(guān)懷版