關係運算符生成的事一個「布爾」(Boolean)結果。它們評價的是運算對象值之間的關係。若關係是真實的,關係表達式會生成true(真);若關係不真實,則生成false(假)。關係運算符包括小於(<)、大於(>)、小於或等於(<=)、大於或等於(>=)、等於(==)以及不等於(!=)。等於和不等於適用於全部內建的數據類型,但其餘比較不適用於boolean類型。java
1 檢查對象是否相等。ui
關係運算符==和!=也適用於全部對象。code
//: Equivalence.java public class Equivalence { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1 == n2); System.out.println(n1 != n2); } } /// :~
其中,表達式System.out.println(n1 == n2);可打印出內部的布爾比較結果。通常人都會認爲輸出結果確定先是ture,再是false,由於兩個Integer對象都是相同的。但儘管對象的內容相同,句柄倒是不一樣的,而==和!=比較的正好就是對象句柄。因此輸出結果上實際上先是false,再是true。這天然會使第一次接觸的人感到驚奇。對象
若想對比兩個對象的實際內容是否相同,又該如何操做呢?此時,必須使用全部對象都適用的特殊方法equals()。但這個方法不適用於「主類型」,那些類型直接適用== 和!=便可。class
//: EqualsMethod.java public class EqualsMethod { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1.equals(n2));//true } } /// :~
正如咱們預計的那樣,此時獲得的結果是true。但事情並未到此結束!假設建立了本身的類,就象下面這樣:數據類型
//: EqualsMethod2.java class Value { int i; } public class EqualsMethod2 { public static void main(String[] args) { Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 100; System.out.println(v1.equals(v2));//false 這是因爲equals()默認行爲是比較句柄的 //必需要重寫equals()方法 } } /// :~