1. 程式人生 > 其它 >java中的equals方法和==號的使用區別

java中的equals方法和==號的使用區別

技術標籤:java筆記學習心得java程式語言

java中的equals方法和==號的使用區別

java的面向物件中有一個特別神奇的方法,它可以比較物件,也可以在我們的定義下為我們所用,進行物件的比較。談起比較,我們就不由得想起來==運算子,那麼接下來我就談談我對這倆的看法。

一. = = 運算子
根據我們的學習和使用我們發現:
1.“= =”運算子可應用於基本資料型別變數和引用型資料變數中(boolean型除外,不是欺負它,它是真的很難比較。。。)
比如,這就是可以的(部分程式碼):

char c1=65;
char c2='A';
if(c1==c2){
system.out.println
(c1+"\t"+c2); }

2.==運算子的比較本質:如果比較的是基本資料變數,則比較的是兩個變數儲存的值是否相同(比較的型別可以不相同,別忘記型別自動提升);如果比較的是引用型的資料變數,則比較的是這幾個物件的地址值,即看其是否指向同一個實體物件。

經過==運算子的總結,聰明的小夥伴都發現了個問題,就是我想比較兩個存在不同實體物件中的東西時該如何比較呢,萬一人家地址不同,但是內容相同咋整?ok,那就看看equals如何秀他的操作叭.

二.equals方法的使用(注意點和使用我就直接一起說了)
1.equals是一個方法,而不是運算子。
2.equals只適用於引用型的資料型別。

3.equals在Object中是和==相同作用的,它在object中的程式碼如下:

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

4.equals的使用格式:
假如要比較引用型的str1和str2,只需要將其寫成:

str1.equals(str2)

5.其實,我把第三點中的object特別提出來說明是因為equals只有在像String,Date,File以及包裝類重寫了object中的equals後才可比較兩個物件的實體內容,否則,還是比較地址。
6.通常,我們會選擇重寫equals以便於我們比較實體內容。(一般編譯器有自動生成的快捷方式求)如果自己寫,我們可以先比較他們的地址(如第三點中的程式碼),再進行別的比較,儘可能的減少計算。

最後,我總結下equals方法的幾個特點:
1.對稱性:比較的兩個物件誰前誰後對結果沒影響。
2.自反性:x.equals(x)是true的。
3.傳遞性:和等法傳遞一樣。
4.任何時候,x.equals(null)是false的。