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; }