002-請說一下 == 和 equals的區(qū)別

前言

面試是類似演講演說的過程,網(wǎng)上的資料都是文字的购岗,沒法讓面試者直觀的體驗到面試過程汰聋,本人已經(jīng)將相關內容制作成音頻節(jié)目,我還不能在簡書上傳音頻喊积,有興趣的朋友可以去喜馬拉雅搜索《2020年Java面試208題》收聽音頻版節(jié)目烹困。

《2020年Java面試208題》整理了208個Java程序員的面試題,主要是針對三年以內開發(fā)經(jīng)驗的JAVA程序員提出的問題乾吻。

題目

今天要說的是《2020年Java面試208題》的第2題髓梅,面試官提問:請說一下 == 和 equals的區(qū)別。

那么就由我來演示一下面試绎签,我會這樣來回答:

演示面試

你好枯饿,面試官,我來說一下 == ?和 equals的區(qū)別诡必。

== 和 equals都是用來做比較的鸭你,不準確的說都是判斷兩個變量是否相等的。

個人認為一般程序員在使用 == 的時候都用的不太對擒权,都應該采用equals袱巨,因為 == 是比較兩個變量的地址是否是同一個,這里借用C的指針來說明更容易碳抄,也就是 == 是判斷左右兩邊的變量的指針是否指向內存中的同一個地址愉老,再說明白點兒就是 == 判斷的是左右兩邊是否是同一個東西起了兩個不同的名字。

因此剖效,我就發(fā)現(xiàn)有很多程序員都在不正確的使用 == 嫉入,比如在庫存管理的時候焰盗,判斷庫存是否為100, 這時候使用== 咒林,盡管返回的是 true熬拒,在判斷結果上是符合業(yè)務邏輯的正確性的垫竞,但在技術層面其實只能算是蒙對了澎粟。

因為100作為常量是放在常量區(qū)的,而保存庫存數(shù)量的變量的值也是放在常量區(qū)的欢瞪,常量區(qū)的特點是相同的值不會有多份活烙,也就是說你定義一個變量a賦值為100,又定義了一個變量b也賦值為100遣鼓,在程序層是兩個變量啸盏,但在常量區(qū)里面,這兩個變量是存在同一個地址的骑祟,當然回懦,你又給b賦值為99,這時候常量區(qū)會檢測是否存在99這樣的常量次企,如果有的話就直接將變量b指向那個99的地址粉怕,否則,會分配空間寫入99抒巢,然后把b指向這個新分配的空間贫贝。

那么再說回來剛剛那個庫存判斷的問題,定義了庫存變量蛉谜,假設變量名為k稚晚,并賦值為實際的庫存量,然后拿k與常量100比較型诚。程序員的思維邏輯是有一個數(shù)為k客燕,有又另一個數(shù)100,然后比較這兩個數(shù)的值是否相同狰贯。但如果采用的是 == 進行比較也搓,其實做的是拿出變量k的在常量區(qū)的地址,和 100這個常量區(qū)的地址涵紊,比較一下是不是其實是相同的地址傍妒。

還有一種情況,這樣比較會出問題摸柄,就是定義一個整型對象 k1賦值100颤练,再定義個整型對象k2賦值100,這時候用 == 做比較就錯了驱负,因為從普通人的視角看嗦玖,100 和100 肯定相等嘛患雇,并且按照前面說的,兩個100在常量區(qū)其實是相同的地址宇挫,那肯定是相同的啊苛吱。但這里還多出了一個整型對象的封裝,100這個值確實是放在常量區(qū)沒有錯器瘪,但整型對象k1和k2定義出來后可沒放在常量區(qū)翠储,這時候==做比較的時候,其實不是比較值的地址是否相同娱局,而是比較k1和k2的地址是否相同彰亥,這樣就會出錯了咧七。

為了避免 == 造成的這種問題衰齐,java在最基礎的類Object中定義了equals方法,任何類在實現(xiàn)的時候都繼承自Object继阻,也就可以重寫equals方法耻涛,按照類的功能需要進行值比較判斷。比如Integer類瘟檩,就是整型類的equals方法將整型對象包裝的整數(shù)值取出來抹缕,然后做 == 比較,這樣其實就是判斷整型值在常量區(qū)的地址是否相等墨辛。

還有浮點數(shù) Float對象卓研,是將浮點數(shù)按照IEEE規(guī)范轉換為整型,具體的這個算法我確實不太了解睹簇,但一定是一個浮點數(shù)最后只會計算得到唯一的整數(shù)值奏赘,因為浮點數(shù)占內存 32位,整型也占內存32位太惠,如果把一個浮點數(shù)的內存空間直接當做是整型讀出來磨淌,那就一定是一個唯一的整數(shù)。Float的equals方法就是這樣凿渊,把浮點數(shù)轉成唯一整數(shù)值梁只,然后再用 == 比較兩個整數(shù)的常量區(qū)地址是否相同的。

字符串則是順序的從最后一個字符做比較埃脏,我們知道字符類型與整型是可以互換的搪锣,所以字符串就是一個字符一個字符的比較每個字符轉成整數(shù)后,在常量區(qū)地址是否相同彩掐。

好了淤翔,以上就是我的演示面試,不知道是否讓你滿意佩谷。

自我點評:

在這個問題的解答中旁壮,我自己加入了對源代碼的分析监嗜,如果有機會讀源代碼,一定要多讀源代碼抡谐,面試的時候能盡可能從源代碼層面做解釋裁奇,還是那句話,逼格比較高麦撵,你把面試官侃暈了你也就成功了刽肠。

下期再見

本人技術有限,憑借熱情希望給程序員面試提供一點幫助免胃,必有不足之處音五,希望業(yè)內人士積極批評指正,在留言區(qū)留言就是對我最大的鼓勵羔沙。希望批評中肯一些躺涝,不要存在人身攻擊,更不要波及到家人扼雏,善意中肯的批評我都能夠虛心接受坚嗜。 我們下期再見。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末诗充,一起剝皮案震驚了整個濱河市苍蔬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝴蜓,老刑警劉巖碟绑,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茎匠,居然都是意外死亡格仲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門汽抚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抓狭,“玉大人,你說我怎么就攤上這事造烁》窆” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵惭蟋,是天一觀的道長苗桂。 經(jīng)常有香客問我,道長告组,這世上最難降的妖魔是什么煤伟? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上便锨,老公的妹妹穿的比我還像新娘围辙。我一直安慰自己,他們只是感情好放案,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布姚建。 她就那樣靜靜地躺著,像睡著了一般吱殉。 火紅的嫁衣襯著肌膚如雪掸冤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天友雳,我揣著相機與錄音稿湿,去河邊找鬼。 笑死押赊,一個胖子當著我的面吹牛饺藤,可吹牛的內容都是我干的。 我是一名探鬼主播考杉,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼策精,長吁一口氣:“原來是場噩夢啊……” “哼舰始!你這毒婦竟也來了崇棠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤丸卷,失蹤者是張志新(化名)和其女友劉穎枕稀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谜嫉,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡萎坷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沐兰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哆档。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖住闯,靈堂內的尸體忽然破棺而出瓜浸,到底是詐尸還是另有隱情,我是刑警寧澤比原,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布插佛,位于F島的核電站,受9級特大地震影響量窘,放射性物質發(fā)生泄漏雇寇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锨侯。 院中可真熱鬧嫩海,春花似錦、人聲如沸囚痴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渡讼。三九已至骂束,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間成箫,已是汗流浹背展箱。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹬昌,地道東北人混驰。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像皂贩,于是被迫代替她去往敵國和親栖榨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容

  • 前言 看大神推薦的書單中入門有這么一本書明刷,所以決定把這本書的精華(自認為很有用的點)婴栽,或許是我自己現(xiàn)在能用到的點都...
    我沒有三顆心臟閱讀 2,188評論 0 6
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友辈末。感恩相遇愚争!感恩不離不棄。 中午開了第一次的黨會挤聘,身份的轉變要...
    迷月閃星情閱讀 10,564評論 0 11
  • 彩排完轰枝,天已黑
    劉凱書法閱讀 4,216評論 1 3
  • 沒事就多看看書,因為腹有詩書氣自華组去,讀書萬卷始通神鞍陨。沒事就多出去旅游,別因為沒錢而找借口从隆,因為只要你省吃儉用诚撵,來...
    向陽之心閱讀 4,783評論 3 11
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒广料。表情可以傳達很多信息砾脑。高興了當然就笑了,難過就哭了艾杏。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,992評論 2 7