Java Object類的equals()方法

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

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

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

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

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

?

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

通過以下實(shí)例我們來加深一下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è)引用的對象是否相等,而equals()方法比較的是兩個(gè)對象的實(shí)際內(nèi)容。我們結(jié)合上面的內(nè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è)引用的對象是否相等,從上圖很容易看出來不等,所以System.out.println(s3==s4),結(jié)果為False;而equals()方法比較的是兩個(gè)對象的實(shí)際內(nèi)容,從圖中可以看出s3和s4都指向apple,內(nèi)容是相同的,所以System.out.println(s3.equals(s4)),結(jié)果為True。

再來看

?

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

?

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


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


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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