== 與equals的區(qū)別

== 與equals的主要區(qū)別是 == 常用于比較原生類型牧氮,而equals()方法用于檢查對象的相等性区宇。另一個不同的點是:如果== 和equals()用于比較對象邪乍,當(dāng)兩個引用地址相同捅伤,== 返回true。而equals()可以返回true或者false主要取決于重寫實現(xiàn)难衰。最常見的一個例子股毫,字符串的比較,不同情況==和equals()返回不同的結(jié)果召衔。equals()方法最重要的一點是铃诬,能夠根據(jù)業(yè)務(wù)要求去重寫,按照自定義規(guī)則去判斷兩個對象是否相等苍凛。重寫equals()方法的時候趣席,要注意一下hashCode是否會因為對象的屬性改變而改變,否則在使用散列集合儲存該對象的時候會碰到坑4己宣肚!理解equals()方法的存在是很重要的。

  1. 使用==比較有兩種情況:

比較基礎(chǔ)數(shù)據(jù)類型(Java中基礎(chǔ)數(shù)據(jù)類型包括八中:short,int,long,float,double,char,byte,boolen):這種情況下悠栓,==比較的是他們的值是否相等霉涨。
引用間的比較:在這種情況下,==比較的是他們在內(nèi)存中的地址惭适,也就是說笙瑟,除非引用指向的是同一個new出來的對象,此時他們使用 ==去比較得到true癞志,否則往枷,得到false。

  1. 使用equals進(jìn)行比較:

equals追根溯源凄杯,是Object類中的一個方法错洁,在該類中,equals的實現(xiàn)也僅僅只是比較兩個對象的內(nèi)存地址是否相等戒突,但在一些子類中屯碴,如:String、Integer 等膊存,該方法將被重寫导而。

  1. 以String類為例子說明equals與==的區(qū)別

在開始這個例子之前,同學(xué)們需要知道JVM處理String的一些特性膝舅。Java的虛擬機在內(nèi)存中開辟出一塊單獨的區(qū)域嗡载,用來存儲字符串對象,這塊內(nèi)存區(qū)域被稱為字符串緩沖池仍稀。當(dāng)使用 String a = "abc"這樣的語句進(jìn)行定義一個引用的時候,首先會在字符串緩沖池中查找是否已經(jīng)相同的對象埂息,如果存在技潘,那么就直接將這個對象的引用返回給a遥巴,如果不存在,則需要新建一個值為"abc"的對象享幽,再將新的引用返回a铲掐。String a = new String("abc");這樣的語句明確告訴JVM想要產(chǎn)生一個新的String對象,并且值為"abc"值桩,于是就在堆內(nèi)存中的某一個小角落開辟了一個新的String對象摆霉。

  • ==在比較引用的情況下,會去比較兩個引用的內(nèi)存地址是否相等奔坟。
    String str1 = "abc";
    String str2 = "abc";
    
    System.out.println(str1 == str2);
    System.out.println(str1.equals(str2));
    
    String str2 = new String("abc");
    System.out.println(str1 == str2);
    System.out.println(str1.equals(str2));
    
以上代碼將會輸出
true
true
false
true
**第一個true:**因為在str2賦值之前携栋,str1的賦值操作就已經(jīng)在內(nèi)存中創(chuàng)建了一個值為"abc"的對象了,然后str2將會與str1指向相同的地址咳秉。
**第二個true:**因為`String`已經(jīng)重寫了`equals`方法:為了方便大家閱讀我貼出來婉支,并且在注釋用進(jìn)行分析:
public boolean equals(Object anObject) {
    //如果比較的對象與自身內(nèi)存地址相等的話
    //就說明他兩指向的是同一個對象
    //所以此時equals的返回值跟==的結(jié)果是一樣的。
    if (this == anObject) {
        return true;
    }
    //當(dāng)比較的對象與自身的內(nèi)存地址不相等澜建,并且
    //比較的對象是String類型的時候
    //將會執(zhí)行這個分支
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            //在這里循環(huán)遍歷兩個String中的char
            while (n-- != 0) {
                //只要有一個不相等向挖,那么就會返回false
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
    
進(jìn)行以上分析之后,就不難理解第一段代碼中的實例程序輸出了炕舵。

總結(jié):

  1. 使用 == 比較原生類型如:boolean何之、int、char等等咽筋,使用equals()比較對象帝美。
  2. == 返回true如果兩個引用指向相同的對象,equals()的返回結(jié)果依賴于具體業(yè)務(wù)實現(xiàn)
  3. 字符串的對比使用equals()代替 == 操作符

以上就是關(guān)于equals方法和==操作符的區(qū)別晤硕,其主要的不同是一個是操作符悼潭,一個是方法,==用于對比原生類型而equals()方法比較對象的相等性舞箍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舰褪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疏橄,更是在濱河造成了極大的恐慌占拍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捎迫,死亡現(xiàn)場離奇詭異晃酒,居然都是意外死亡,警方通過查閱死者的電腦和手機窄绒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門贝次,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彰导,你說我怎么就攤上這事蛔翅∏们眩” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵山析,是天一觀的道長堰燎。 經(jīng)常有香客問我,道長笋轨,這世上最難降的妖魔是什么秆剪? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮爵政,結(jié)果婚禮上仅讽,老公的妹妹穿的比我還像新娘。我一直安慰自己茂卦,他們只是感情好何什,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著等龙,像睡著了一般处渣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛛砰,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天罐栈,我揣著相機與錄音,去河邊找鬼泥畅。 笑死荠诬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的位仁。 我是一名探鬼主播柑贞,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼聂抢!你這毒婦竟也來了钧嘶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤琳疏,失蹤者是張志新(化名)和其女友劉穎有决,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體空盼,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡书幕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揽趾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台汇。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出励七,到底是詐尸還是另有隱情智袭,我是刑警寧澤奔缠,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布掠抬,位于F島的核電站,受9級特大地震影響校哎,放射性物質(zhì)發(fā)生泄漏两波。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一闷哆、第九天 我趴在偏房一處隱蔽的房頂上張望腰奋。 院中可真熱鬧,春花似錦抱怔、人聲如沸劣坊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽局冰。三九已至,卻和暖如春灌危,著一層夾襖步出監(jiān)牢的瞬間康二,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工勇蝙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沫勿,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓味混,卻偏偏與公主長得像产雹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翁锡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法蔓挖,類相關(guān)的語法,內(nèi)部類的語法盗誊,繼承相關(guān)的語法时甚,異常的語法,線程的語...
    子非魚_t_閱讀 31,622評論 18 399
  • 本文采用總分總的小學(xué)生寫作手法較為深入地探究了“==”與“equals()”的區(qū)別 :-) 概括 用途:equal...
    廖少少閱讀 2,106評論 18 35
  • 現(xiàn)實人生就是這樣哈踱,大多時候乏善可陳荒适,有時卻有最奇特的經(jīng)驗勝過一切傳奇。很多人寄望于西藏开镣,搖滾樂刀诬,戀愛,希望從中發(fā)現(xiàn)...
    昨日尋月閱讀 278評論 0 1
  • —— 青音青音(知乎):人生一定會遇到對的那個人嗎人生那么長邪财,相遇那么多陕壹,一定會遇到“對的人”的...
    嵐風(fēng)的葉子閱讀 749評論 0 0
  • 鏢車緩緩行著质欲,車輪發(fā)出一陣陣厚重的“吱呀”聲,在地上留下一排排整齊的轍印糠馆,仿佛少女剛用木梳梳過的頭發(fā)嘶伟。不過,沒一會...
    陌代閱讀 715評論 0 1