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方法檢查相等性,行爲是一致的。code
==與equals方法的區別對象
==與equals的主要區別是:==經常使用於比較原生類型,而equals()方法用於檢查對象的相等性。另外一個不一樣的點是:若是==和equals()用於比較對象,當兩個引用地址相同,==返回true。而equals()能夠返回true或者false主要取決於重寫實現。最多見的一個例子,字符串的比較,不一樣狀況==和equals()返回不一樣的結果。教程
字符串的==和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和==方法操做比較的是兩個對象。string
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
總結:
以上就是關於equals方法和==操做符的區別,其主要的不一樣是一個是操做符一個是方法,==用於對比原生類型而equals()方法比較對象的相等性。