2016-04-11 79 views
3

在Java中,當使用==比較兩個對象時,還會比較它們的引用。但是當使用其他關係運算符進行比較時會發生什麼?例如:Java Object <=關係運算符檢查

Integer a = new Integer(10); 
Integer b = new Integer(9); 
if (a >= b) { 
    System.out.println("A is greater"); 
} 

當我運行這個,我得到輸出爲A是更大的,爲什麼呢?參考文獻沒有得到比較或者他們這樣做,這只是一個巧合?

此外,如果其中一個參數是原始的,那麼非原始的參數是否會解開爲原始類型以進行這種比較?

+0

將其輸入源文件並查看更多有趣類型會發生什麼。 *一般*這是一個語法錯誤。 –

回答

6

在你的例子中,Integer(s)是unboxed到原始int(s)。對於參考類型沒有<=(或>=)比較(沒有ComparableComparator或類似的)。

+0

但是,如果運算符重載不存在,它如何unbox?這是一個編譯器優化? –

+0

拆箱是一種編譯器,允許Java將包裝類型轉換爲原始類型(反之亦然)。 –