關系運算符生成的是一個
布爾
(Boolean)結果
它們評價的是運算對象值之間的關系
若關系是真實的
關系表達式會生成true(真)
若關系不真實
則生成false(假)
關系運算符包括小於(<)、大於(>)
小於或等於(<=)、大於或等於(>=)
等於(==)以及不等於(!=)
等於和不等於適用於所有內建的數據類型
但其他比較不適用於boolean類型
檢查對象是否相等
關系運算符==和!=也適用於所有對象
但它們的含義通常會使初涉Java領域的人找不到北
下面是一個例子
//: Equivalence
java
public class Equivalence {
public static void main(String[] args) {
Integer n
= new Integer(
);
Integer n
= new Integer(
);
System
out
println(n
== n
);
System
out
println(n
!= n
);
}
} ///:~
其中
表達式System
out
println(n
== n
)可打印出內部的布爾比較結果
一般人都會認為輸出結果肯定先是true
再是false
因為兩個Integer對象都是相同的
但盡管對象的內容相同
句柄卻是不同的
而==和!=比較的正好就是對象句柄
所以輸出結果實際上先是false
再是true
這自然會使第一次接觸的人感到驚奇
若想對比兩個對象的實際內容是否相同
又該如何操作呢?此時
必須使用所有對象都適用的特殊方法equals()
但這個方法不適用於
主類型
那些類型直接使用==和!=即可
下面舉例說明如何使用
//: EqualsMethod
java
public class EqualsMethod {
public static void main(String[] args) {
Integer n
= new Integer(
);
Integer n
= new Integer(
);
System
out
println(n
equals(n
));
}
} ///:~
正如我們預計的那樣
此時得到的結果是true
但事情並未到此結束!假設您創建了自己的類
就象下面這樣
//: EqualsMethod
java
class Value {
int i;
}
public class EqualsMethod
{
public static void main(String[] args) {
Value v
= new Value();
Value v
= new Value();
v
i = v
i =
;
System
out
println(v
equals(v
));
}
} ///:~
此時的結果又變回了false!這是由於equals()的默認行為是比較句柄
所以除非在自己的新類中改變了equals()
否則不可能表現出我們希望的行為
不幸的是
要到第
章才會學習如何改變行為
但要注意equals()的這種行為方式同時或許能夠避免一些
災難
性的事件
大多數Java類庫都實現了equals()
所以它實際比較的是對象的內容
而非它們的句柄
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19311.html