關係操作符
關係操作符生成的是一個boolean(布爾)結果,它們計算的是操作數的值之間的關係。
如果關係是真實的,關係表達式會生成true(真);如果關係不真實,則生成false(假)。
關係操作符包括<,>,<=,>=,==以及不等於!=.
等於和不等於適用於所有的基本數據類型,而其他比較符不適用於boolean類型。
因爲boolean值只能爲true或false,“大於”和“小於”沒有實際意義。
Testing object equivalence
測試對象的等價性
關係操作符==和!=適用於所有對象,但這兩個操作符通常會讓人迷惑。下面是個例子
//:operators/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);//false
System.out.println(n1!=n2);//true
}
}
///:~
儘管對象的內容相同,然而對象的引用卻是不同的。而==和!=比較的就是對象的引用。
所以輸出結果實際上先是false。再是true。
如果想比較兩個對象的實際內容是否相同。必須使用所有對象都使用的特殊方法equals().
但是這個方法不適用於“基本類型”,基本類型直接使用==和!=即可。
下面舉例說明如何使用:
//: operators/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
}
}
///:~
結果如我們所預料的那樣。但事情並不總是那麼簡單,假設你創建了自己的類,就像下面這樣:
//: operators/EqualsMethod2.java
//Default equals() does not compare contents
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
}
}
///:~
事情再次變得令人費解:結果又是false。這是由於equals()的默認行爲是比較引用。
所以除非在自己的新類中覆蓋equals()方法,否則不可能表現出我們希望的行爲、
大多數Java類庫都實現了equals()方法,以便用來比較對象的內容,而非比較對象的引用、