Day8-25.Relational operators

關係操作符

關係操作符生成的是一個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()方法,以便用來比較對象的內容,而非比較對象的引用、


發佈了28 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章