Long是包装类,不能直接用==做比较,==比较的是地址。
public static void main(String[] args) {
Long a1 = 127L;
Long b1 = 127L;
System.out.println(a1 == b1);
System.out.println("----------------------------");
/**
* long 是基本类型
* Long是对象类型,进行比较时:若验证相等则取地址,数值为(-128~127)则相等,
* 因为这段数值取的是相同的地址,其余的则不相等,验证相等可用longValue(),可用equals();
*/
Long a2 = new Long(128);;
Long b2 = new Long(128);
System.out.println(a2 == b2);
System.out.println(a2.longValue() == b2.longValue());
System.out.println(a2.equals(b2));
System.out.println("----------------------------");
long a3 = 129L;
long b3 = 129L;
System.out.println(a3 == b3);
}
结果:
true
----------------------------
false
true
true
----------------------------
true
Long和long比较的时候会不会自动拆包,不是很确定。安全起见,比较时有Long的都转为long就行了。