99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

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

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

0
分享至

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



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

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

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

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

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

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

這讓我有點尷尬了,因為我被他這么一說,我才想起來,我似乎從來沒有用過Equals!

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

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

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

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

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

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

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

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

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



結(jié)語

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

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

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

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

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

聲明:個人原創(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)推薦
熱點推薦
為何美國不直接凍結(jié)中國在美資產(chǎn)?只要敢這么做,幫了中國的大忙

為何美國不直接凍結(jié)中國在美資產(chǎn)?只要敢這么做,幫了中國的大忙

西樓知趣雜談
2025-04-19 10:11:48
安東尼深情告別貝蒂斯:這是人生最美麗篇章,這份愛此生不渝

安東尼深情告別貝蒂斯:這是人生最美麗篇章,這份愛此生不渝

直播吧
2025-06-01 00:42:32
鬧大了!原來這件事是真的,事發(fā)上海…

鬧大了!原來這件事是真的,事發(fā)上海…

慧翔百科
2025-05-12 09:04:07
被制裁7年后,華為還是重回巔峰

被制裁7年后,華為還是重回巔峰

硬核熊貓說
2025-05-17 16:48:36
2-1!法網(wǎng)最神奇黑馬誕生,NO.361首進大滿貫16強,鄭欽文碰不到

2-1!法網(wǎng)最神奇黑馬誕生,NO.361首進大滿貫16強,鄭欽文碰不到

侃球熊弟
2025-05-31 21:58:59
這就是命?巴黎加冕歐冠冠軍!KD去年剛剛投資成為巴黎小老板

這就是命?巴黎加冕歐冠冠軍!KD去年剛剛投資成為巴黎小老板

直播吧
2025-06-01 07:16:18
姆巴佩去年12月采訪:現(xiàn)在不希望巴黎贏得歐冠,因為我要先贏

姆巴佩去年12月采訪:現(xiàn)在不希望巴黎贏得歐冠,因為我要先贏

直播吧
2025-06-01 15:31:03
孫繼海淘汰邊緣球員不收費!怪不得張卓毅母親敢提無理要求

孫繼海淘汰邊緣球員不收費!怪不得張卓毅母親敢提無理要求

金牌娛樂
2025-06-01 09:21:46
賈乃亮?xí)衽c甜馨端午節(jié)合照,父女五官如同復(fù)制粘貼

賈乃亮?xí)衽c甜馨端午節(jié)合照,父女五官如同復(fù)制粘貼

瀟湘晨報
2025-05-31 21:34:06
殲-20在渤海擊落F-35和預(yù)警機?越傳越離譜,造謠者膽子太肥了

殲-20在渤海擊落F-35和預(yù)警機?越傳越離譜,造謠者膽子太肥了

第一軍情
2025-05-31 19:33:23
2025金球獎獲獎概率更新:登貝萊與亞馬爾并駕齊驅(qū),杜埃進榜

2025金球獎獲獎概率更新:登貝萊與亞馬爾并駕齊驅(qū),杜埃進榜

雷速體育
2025-06-01 06:56:32
86票贊成,美國得州通過新法案,不許中國等外國人在美買房買地

86票贊成,美國得州通過新法案,不許中國等外國人在美買房買地

大道無形我有型
2025-05-30 21:02:48
重大事件!俄軍遭重創(chuàng)后勤生命線遭烏軍炸斷,布良斯克州橋梁坍塌

重大事件!俄軍遭重創(chuàng)后勤生命線遭烏軍炸斷,布良斯克州橋梁坍塌

國際情爆猿
2025-06-01 08:13:41
血賺步行者去年用布魯斯-布朗+三首輪換到的東決MVP西亞卡姆

血賺步行者去年用布魯斯-布朗+三首輪換到的東決MVP西亞卡姆

直播吧
2025-06-01 11:07:15
中方否決了印度提案,為“擊敗中國”,莫迪要砸重金,干三件大事

中方否決了印度提案,為“擊敗中國”,莫迪要砸重金,干三件大事

朝子亥
2025-06-01 18:50:03
臺陸委會最新民調(diào)公布,向大陸表達四個“不認同”,解放軍大動作

臺陸委會最新民調(diào)公布,向大陸表達四個“不認同”,解放軍大動作

DS北風(fēng)
2025-05-30 11:33:11
特朗普宣布美軍新目標:不戰(zhàn)而勝,不玩多元化,不去外國搞顛覆

特朗普宣布美軍新目標:不戰(zhàn)而勝,不玩多元化,不去外國搞顛覆

紅色鑒史官
2025-05-31 17:35:03
86票贊成,特朗普圈定戰(zhàn)場,不許中國人在美購房,中方大幅拋美債

86票贊成,特朗普圈定戰(zhàn)場,不許中國人在美購房,中方大幅拋美債

史海任我行
2025-05-31 19:22:51
非要打垮東大?最大“對手”出現(xiàn)!這次不是美國,普京成最大贏家

非要打垮東大?最大“對手”出現(xiàn)!這次不是美國,普京成最大贏家

小小小白看世界
2025-06-01 06:03:49
提拉米蘇中毒事件監(jiān)測報告公布,比毒藥還猛,女網(wǎng)紅要踩縫紉機了

提拉米蘇中毒事件監(jiān)測報告公布,比毒藥還猛,女網(wǎng)紅要踩縫紉機了

新游戲大妹子
2025-05-31 12:43:38
2025-06-01 19:43:00
程序員古耕 incentive-icons
程序員古耕
程序員、網(wǎng)文作家、自媒體人
533文章數(shù) 362關(guān)注度
往期回顧 全部

科技要聞

熱搜!雷軍疑回應(yīng)余承東

頭條要聞

剛走一天就遭白宮"背刺" 馬斯克:很失望

頭條要聞

剛走一天就遭白宮"背刺" 馬斯克:很失望

體育要聞

一邊倒的歐冠決賽,青春無敵的新科冠軍

娛樂要聞

張若昀夫婦國外遛娃 男方推平價兒童車

財經(jīng)要聞

油價繼續(xù)下跌?歐佩克宣布將再度增產(chǎn)

汽車要聞

零跑汽車5月交付量達45,067臺 穩(wěn)居新勢力前三

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

手機
藝術(shù)
家居
教育
公開課

手機要聞

vivo攜手OPPO成最大贏家,但第一不屬于它們

藝術(shù)要聞

故宮珍藏的墨跡《十七帖》,比拓本更精良,這才是地道的魏晉寫法

家居要聞

原木純白 邂逅自然本真

教育要聞

支教女教師:在偷電瓶與交白卷的鄉(xiāng)鎮(zhèn)中學(xué),我看見教育最痛的真相

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關(guān)懷版 主站蜘蛛池模板: 育儿| 齐河县| 呼玛县| 梅州市| 金乡县| 沁源县| 台南县| 土默特右旗| 连山| 凭祥市| 通化市| 松潘县| 利津县| 临潭县| 靖江市| 浪卡子县| 昆山市| 饶平县| 新安县| 陆良县| 昌平区| 海盐县| 长春市| 江永县| 普格县| 文安县| 桦南县| 绩溪县| 乐陵市| 黄浦区| 铜鼓县| 泰和县| 长垣县| 宁津县| 鹤岗市| 鸡西市| 舟曲县| 青州市| 葫芦岛市| 曲松县| 云阳县|