Java_語法基礎_謹慎包裝類型的大小比較

基本類型是可以比較大小的,其所對應的包裝類型都實現了Comparable接口也說明了此問題,那我們來比較一下兩個包裝類型的大小,代碼如下:

package deep;


public class Client {

    public static void main(String[] args) {
        Integer i = new Integer(100);
        Integer j = new Integer(100);
        compare(i, j);
    }

    /**
     * @Description 比較兩個包裝對象大小
     * @author 田爽
     * @date 2015年4月9日下午8:51:33
     */
    private static void compare(Integer i, Integer j) {
        System.out.println(i == j);
        System.out.println(i > j);
        System.out.println(i < j);

    }

}

代碼很簡單,產生了兩個Integer對象,然後比較兩者的大小關係,既然基本類型和包裝類型是可以自由轉換的,那上面的代碼是不是就可打印出兩個相等的值呢?讓事實說話,運行結果如下:
false
false
false

竟然是3個false,也就是說兩個值不等,也沒大小關係,這也太奇怪了吧。不奇怪,我們來一一解釋。

  • i==j
    在Java中“==”是用來判斷兩個操作數是否有相等關係的,如果是基本類型則判斷值是否相等,如果是對象則判斷是否是一個對象的兩個引用,也就是地址是否相等,這裏很明顯是兩個對象,兩個地址,不可能相等。
  • i > j和i < j
    在Java中,“>”和“<”用來判斷兩個數字類型的大小關係,注意只能是數字型的判斷,對於Integer包裝類型,是根據其intValue()方法的返回值(也就是其相應的基本類型)進行比較的(其他包裝類型是根據相應的value值來比較的,如doubleValue、floatValue等),那很顯然,兩者不可能有大小關係的。
    問題清楚了,修改總是比較容易的,直接使用Integer實例的compareTo方法。但是這類問題的產生更應該說是習慣問題,只要是兩個對象之間的比較就應該採用相應的方法,而不是通過Java的默認機制來處理,除非你確定對此非常瞭解
發佈了133 篇原創文章 · 獲贊 11 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章