1. 程式人生 > >Java之關係操作符

Java之關係操作符

       對於一般的基本資料型別關係不多講,這裡主要講下關係操作符 == 和 != 用在物件上會有什麼不一樣,看個例子:

public class text {
    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);
    }
}

//結果為:
false
true

         一般人肯定會認為結果肯定是先true,再false, 因為兩個Integer物件都相同啊。但對於兩個物件儘管內容一樣但是引用卻不一樣,而== 和 != 比較的就是物件的引用。所以是先false再true。

        那如果想比較內容是否一樣呢,可以使用所有物件都適用的特殊方法equals()。看下面例子:

public class text {
    public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1.equal(n2));
    }
}

//結果為:
true

     結果如我們所料,但事情總沒有那麼簡單,假如你建立了自己的類,如下所示:

class Tank{
    int level;
}
public class text {
    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = t2.level = 100;
        System.out.println(t1.equals(t2));
    }
}

//結果為:
false

       事情又變得複雜了:結果又是false!這是由於equals()的預設行為是比較引用的。所有除非你自己在新類中覆蓋equals()方法,否則不會出現希望的結果。如下:

class Tank{
    int level;
     public boolean equals(Tank obj) {
        return level == obj.level;
    }
}
public class text {
    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = t2.level = 100;
        System.out.println(t1.equals(t2));
    }
}

//結果為:
true

對於大多數Java類庫都實現了equals()方法,以便用來比較物件的內容,而非比較物件的引用