大家在刷面試題的時候可能都刷到過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都是比較...