java Long的值判斷是否相等


Long的值判斷是否相等使用 “==”,遇到問題

public class Demo {
    public static void main(String[] args) {
        Long m = 1L;
        Long n = 1L;
        if (m == n) {
            System.out.println("m 等於 n");
        } else {
            System.out.println("m 不等於 n");
        }
    }
}

輸出

  m 等於 n

public class Demo {
    public static void main(String[] args) {
        Long m = 128L;
        Long n = 128L;
        if (m == n) {
            System.out.println("m 等於 n");
        } else {
            System.out.println("m 不等於 n");
        }
    }
}

輸出

  m 不等於 n

原因:

  如果Long的值在[-127,128]之間,用 “==” 判斷是否相等是沒問題的 

  如果不在[-127,128]之間,則會new一個新對象,就不能用 “==”

public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
}

解決的方法

  (1)使用 .longValue()

public class Demo {
    public static void main(String[] args) {
        Long m = 128L;
        Long n = 128L;
        if (m.longValue() == n.longValue()) {
            System.out.println("m 等於 n");
        } else {
            System.out.println("m 不等於 n");
        }
    }
}

輸出

  m 等於 n

  (2)使用 .equals()

public class Demo {
    public static void main(String[] args) {
        Long m = 128L;
        Long n = 128L;
        if (m.equals(n)) {
            System.out.println("m 等於 n");
        } else {
            System.out.println("m 不等於 n");
        }
    }
}

輸出

  m 等於 n

補充:

  最佳解決方案為 .eques()

public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM