Java Object類(lèi)的equals()方法

所有類(lèi)都從Object類(lèi)中繼承了equals方法,Object類(lèi)中equals方法源代碼如下:

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

Object中的equals方法是直接判斷this和obj本身的值是否相等,即用來(lái)判斷調(diào)用equals的對(duì)象和形參obj所引用的對(duì)象是否是同一對(duì)象,所謂同一對(duì)象就是指內(nèi)存中同一塊存儲(chǔ)單元,如果this和obj指向的是同一塊內(nèi)存對(duì)象,則返回true,如果this和obj指向的不是同一塊內(nèi)存,則返回false,注意:即便是內(nèi)容完全相等的兩塊不同的內(nèi)存對(duì)象,也返回false。

那么equals()方法與之前的“==”有什么區(qū)別呢?

在進(jìn)行演示代碼之前先來(lái)了解一下Java內(nèi)存的主要?jiǎng)澐?,可以幫助我們更好地理解下面的?shí)例演示。

?

Java虛擬機(jī)里的堆區(qū)要存放new出來(lái)的對(duì)象,棧區(qū)存放局部變量,而方法區(qū)包含了類(lèi)的所有信息,包括所有的方法,靜態(tài)變量,常量等。

通過(guò)以下實(shí)例我們來(lái)加深一下equals與,代碼如下:

public?class?Equals{
public?static?void?main(String[] args){
String s1="apple";
String s2="apple";
System.out.println(s1==s2); ? ?//true
System.out.println(s1.equals(s2)); ? ?//equals比較的是內(nèi)容,true
String s3=new?String("apple");
String s4=new?String("apple");
System.out.println(s3==s4); ?//false
System.out.println(s3.equals(s4)); ?//true
}
}

從上面的實(shí)例可以看出,“==”比較的是兩個(gè)引用的對(duì)象是否相等,而equals()方法比較的是兩個(gè)對(duì)象的實(shí)際內(nèi)容。我們結(jié)合上面的內(nèi)存的劃分來(lái)理解這個(gè)區(qū)別。

String?str1=new?String("apple");
String?str2=new?String("apple");
System.out.println(s3==s4); ?//false
System.out.println(s3.equals(s4)); ?//true

?

上述幾行代碼內(nèi)存分析如下圖所示:

?

因?yàn)椤?=”比較的是兩個(gè)引用的對(duì)象是否相等,從上圖很容易看出來(lái)不等,所以System.out.println(s3==s4),結(jié)果為False;而equals()方法比較的是兩個(gè)對(duì)象的實(shí)際內(nèi)容,從圖中可以看出s3和s4都指向apple,內(nèi)容是相同的,所以System.out.println(s3.equals(s4)),結(jié)果為T(mén)rue。

再來(lái)看

?

String?s1="apple";
String?s2="apple";

?

內(nèi)存分析如下圖:


很容易看出System.out.println(s1==s2)的結(jié)果為T(mén)rue。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書(shū)筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 966評(píng)論 1 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,853評(píng)論 18 399
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周書(shū)達(dá)閱讀 834評(píng)論 0 0
  • 難得的周末,約上明的大學(xué)同學(xué),一同化身吃貨,掃蕩廣州天河崗頂?shù)娜佤~(yú)和點(diǎn)都德。 說(shuō)是掃蕩,其實(shí)是夸張了,畢竟我們才幾...
    明與夢(mèng)閱讀 421評(píng)論 0 0
  • 《錦州燒烤》集體商標(biāo)使用管理規(guī)則 第一章總則 第一條為了明確錦州燒烤行業(yè)協(xié)會(huì)會(huì)員集體商標(biāo)使用范圍,共同維護(hù)和提高協(xié)...
    錦州御燒烤閱讀 626評(píng)論 0 0

友情鏈接更多精彩內(nèi)容