equals()和「==」操做用於對象的比較,檢查倆對象的相等性,可是他們倆的主要區別在於前者是方法後者是操做符。因爲java不支持操做符重載(overloading),「==」的行爲對於每一個對象來講與equals()是徹底相同的,可是equals()能夠基於業務規則的不一樣而重寫(overridden )。另外一個須要注意的不一樣點是「==」習慣用於原生(primitive)類型之間的比較,而equals()僅用於對象之間的比較。同時初學者奮力地想找到何時使用等號操做「==」,何時使用equals方法。這篇教程中你將將看到equals()方法和「==」操做是若是工做的、他們之間有什麼不一樣、何時用「==」、何時使用equals()方法。java
「==」等號操做是什麼編程
「==」或等號操做在Java編程語言中是一個二元操做符,用於比較原生類型和對象。就原生類型如boolean、int、float來講,使用「==」來比較二者,這個很好掌握。可是在比較對象的時候,就會與equals()形成困惑。「==」對比兩個對象基於內存引用,若是兩個對象的引用徹底相同(指向同一個對象)時,「==」操做將返回true,不然返回false。dom
什麼是equals方法編程語言
equals()方法定義在Object類裏面,根據具體的業務邏輯來定義該方法,用於檢查兩個對象的相等性。例如:兩個Employees被認爲是相等的若是他們有相同的empId的話,你能夠在你本身的domain對象中重寫equals方法用於比較哪兩個對象相等。equals與hashcode是有契約的(不管何時你重寫了equals方法,你一樣要重寫hashcode()方法),默認的equals方法實現是與「==」操做同樣的,基於業務需求重寫equals方法是最好的實踐之一,一樣equals與compareTo保持一致也不足爲奇,以致於存儲對象在Treemap或treeset集合中時,將使用compareTo方法檢查相等性,行爲是一致的。spa
==與equals方法的區別code
==與equals的主要區別是:==經常使用於比較原生類型,而equals()方法用於檢查對象的相等性。另外一個不一樣的點是:若是==和equals()用於比較對象,當兩個引用地址相同,==返回true。而equals()能夠返回true或者false主要取決於重寫實現。最多見的一個例子,字符串的比較,不一樣狀況==和equals()返回不一樣的結果。orm
字符串的==和equals對比對象
字符串的比較是一個常見的情景,由於java.lang.String類重寫了equals方法,它返回true若是兩個字符串對象包含有相同的內容,可是==只有他們的引用地址相同時才返回true,下面這個例子就是經過==和equals方法分別比較兩個字符串。教程
String personalLoan =
new
String(
"cheap personal loans"
);
String homeLoan =
new
String(
"cheap personal loans"
);
//since two strings are different object result should be false
boolean
result = personalLoan == homeLoan;
System.out.println(
"Comparing two strings with == operator: "
+ result);
//since strings contains same content , equals() should return true
result = personalLoan.equals(homeLoan);
System.out.println(
"Comparing two Strings with same content using equals method: "
+ result);
homeLoan = personalLoan;
//since both homeLoan and personalLoand reference variable are pointing to same object
//"==" should return true
result = (personalLoan == homeLoan);
System.out.println(
"Comparing two reference pointing to same String with == operator: "
+ result);
Output:
Comparing two strings with == operator:
false
Comparing two Strings with same content using equals method:
true
Comparing two reference pointing to same String with == operator:
true
==與equals在對象之間的對比
另外一中情景是:當你對比兩個對象時,在選擇==和equals方法中很容易困惑,當你比較的兩個引用指向的對象是Object的類型的時候,那麼你看到的結果和==是一致的,由於默認的equals方法實現僅僅比較的內存地址。若是兩個引用變量徹底指向的是同一個對象的話就返回true,下面這個例子是equals和==方法操做比較的是兩個對象。內存
Object obj1 =
new
Object();
Object obj2 =
new
Object();
// == should return false
result = (obj1==obj2);
System.out.println(
"Comparing two different Objects with == operator: "
+ result);
//equals should return false because obj1 and obj2 are different
result = obj1.equals(obj2);
System.out.println(
"Comparing two different Objects with equals() method: "
+ result);
// "==" should return true because both obj1 and obj2 points same object
obj1=obj2;
result = (obj1==obj2);
System.out.println(
"Comparing two reference pointing to same Object with == operator: "
+ result);
Output:
Comparing two different Objects with == operator:
false
Comparing two different Objects with equals() method:
false
Comparing two reference pointing to same Object with == operator:
true
總結:
使用==比較原生類型如:boolean、int、char等等,使用equals()比較對象。
==返回true若是兩個引用指向相同的對象,equals()的返回結果依賴於具體業務實現
字符串的對比使用equals()代替==操做符
以上就是關於equals方法和==操做符的區別,其主要的不一樣是一個是操做符一個是方法,==用於對比原生類型而equals()方法比較對象的相等性。