equals和 的區別詳解

2021-10-01 01:28:50 字數 1707 閱讀 9923

大家在刷面試題的時候可能都刷到過equals和==之間的區別?簡單來說答案就是:equals和 ==比較的都是位址,只不過許多類中都重寫了equals方法,用來比較他們之間的值。接下來我們就詳細看看,他們之間究竟有什麼區別。

一、堆和棧的區別

舉個例子說明一下,string a = new string(「123」);

1)、物件的引用放在棧中,上例中a放在棧中;

2)、八種基本資料型別放在棧中:byte,short,int,long,float,double,char,boolean;

3)、物件放在堆中,上例中new string(「123」)放在堆中。

因此基本資料型別用==號比較沒任何問題。但是注意integer,float,boolean…不屬於基本資料型別,它們屬於基本型別的包裝型別。

二、幾種常見類中的equals方法原始碼

// object類

public

boolean

equals

(object obj)

//boolean類

public

boolean

equals

(object obj)

return

false

;}

//integer類

public

boolean

equals

(object obj)

return

false

;}

// string類

public

boolean

equals

(object anobject)

if(anobject instanceof

string

)return

true;}

}return

false

;}

我們可以看到,除了基類object中比較的是位址以外,其他幾個類中重寫equals方法後比較的都是值。這裡只是隨便列舉了幾個常見的類。

三、常量池

數字常量池存放的範圍是-128~127。我們直接看**

public

static

void

main

(string[

] args)

執行結果為:false、true。

當integer 初始化的範圍在-128~127之間,是放在常量池中。但是當不在這個範圍時,就會在堆中開闢一塊空間來存放,所以這時候比較的位址是不同的,因此返回false。

四、例項分析

public

static

void

main

(string[

] args)

返回結果為false,true;

首先「0000」是存在常量池中的,「0000」==map.get(「ssk」),因此map.get(「ssk」)也存在常量池中,「0000」==map1.get(「ssk」)返回false。可以判斷出map1.get(「ssk」)是在堆記憶體中。

Equals 和 的區別

對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩個物件的內容是否一致 equals...

equals 和 的區別

equals 方法 是string類從它的超類object中繼承的 被用來檢測兩個物件是否相等,即兩個物件的內容是否相等。用於比較引用 和 比較基本資料型別時具有不同的功能 1.比較基本資料型別,如果兩個值相同,則結果為true 2.而在比較引用時,如果引用指向記憶體中的同一物件,結果為true s...

和equals的區別

和 equals 的區別 1.是乙個運算子。2.equals則是string物件的方法,可以.點 出來。我們比較無非就是這兩種 1 基本資料型別比較 2 引用物件比較 1 基本資料型別比較 和equals都比較兩個值是否相等。相等為true 否則為false 2 引用物件比較 和equals都是比較...