操作符之關係操作符

關係操作符
  關係操作符生產的是一個boolean(布爾)結果,它們計算的是操作數的值之間的關係。如果關係是真實的,關係表達式會生成true(真);如果關係不真實,則會生成false(假),關係操作符包括小於(<),大於(>),小於或等於(<=),大於或等於(>=),等於(====)以及不等於(!=),等於和不等於適用於所有的基本數據類型,而其他比較符不適用於boolean類型。因爲boolean值只能爲true或false,“大於”和“小於”沒有實際意義。
測試對象的等價性
  關係操作符 == 和!=也適合用於所有對象,但是這倆個操作符通常會使第一次接觸Java的程序員感到迷惑。下面是一個例子:

			//:operators/Equicalence.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);
					}
				}/*Output:
				false
				true
				*/

      語句Systemout.println(n1 == n2)將打印出括號內的比較式的布爾值結果。讀者可能認爲輸出結果肯定先是true,再是false,因爲兩個Integer對象都是相同的。但是儘管對象的內容相同,然而對象的引用卻是不同的,而====和!=比較的就是對象的引用。所以輸出結果實際上顯示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));
					}
			}/*Output:
			true
			*/

      結果正如我們所預料的那樣。但事情並不總是這麼簡單!假設你創建了自己的類,就像下面這樣:

			//:operators/EqualsMethod.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));
				}
			}/*Output:
			false
			*/

      事情再次變得令人費解了:結果又是false!這是由於equals()的默認行爲是比較引用。所以除非在自己的新類中覆蓋equals()方法,否則不可能表現出我們希望的行爲。
  在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章