java關係操作符(==、!=)和equals()
阿新 • • 發佈:2019-02-07
關係操作符生成的是一個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 */
當我自己建立一個類,如下:
結果卻為FALSE,這是因為equals()的預設行為是比較物件引用,所以在自己的新類中覆蓋equals()方法,否則不可能表現出我們想看到的行為。//: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 */
關於覆蓋請看下篇~~~~