1. 程式人生 > >java關係操作符(==、!=)和equals()

java關係操作符(==、!=)和equals()

關係操作符生成的是一個Boolean結果,它們計算的是運算元之間的關係,如果運算元之間的關係是真實的就會生成TRUE,如果不真實,則生成FALSE。

關係操作符包括(<、>、<=、>=、==、!=)。等於和不等於適用於所有的基本資料型別,而其他比較符不適用於Boolean型別。因為Boolean值只能為TRUE或者FALSE,大於和小於沒有實際意義。

//: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);
	System.out.println(n1 != n2);
    }
}
/*Output
  false
  true
*/

編譯結果為先是FALSE,然後是TRUE,這是因為儘管兩個物件的內容相同,但是物件的引用確實不同的,而== 和 != 比較的就是物件的引用,所以輸出結果先是FALSE,再是TRUE。

如果想比較兩個物件的實際內容是否相同,就用equals();但是這個方法不適用於“基本型別”,基本型別可直接使用==和!=即可。如下:

//: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.equals(n2));
    }
}
/*Output
  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));
    }
}
/*Output
  false
*/
結果卻為FALSE,這是因為equals()的預設行為是比較物件引用,所以在自己的新類中覆蓋equals()方法,否則不可能表現出我們想看到的行為。

關於覆蓋請看下篇~~~~