Java之關係操作符
阿新 • • 發佈:2018-12-04
對於一般的基本資料型別關係不多講,這裡主要講下關係操作符 == 和 != 用在物件上會有什麼不一樣,看個例子:
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()方法,以便用來比較物件的內容,而非比較物件的引用