神奇的Integer
- 使用
==
的情况:- 如果比较Integer变量,默认比较的是地址值。
- Java的Integer维护了从
-128~127
的缓存池 - 如果比较的某一边有操作表达式(例如a+b),那么比较的是具体数值
- 使用
equals()
的情况:- 无论是Integer还是Long中的
equals()
默认比较的是数值。 - Long的
equals()
方法,JDK的默认实现:会判断是否是Long类型
- 无论是Integer还是Long中的
- 注意自动拆箱,自动装箱问题。
/**
* @Auther: liuhaidong
* Data: 2020/3/1 0001、17:24
* Description:
* @version: 1.0
*/
public class Test48 {
public static void main(String[] paramArrayOfString) {
Integer localInteger1 = Integer.valueOf(1);
Integer localInteger2 = Integer.valueOf(2);
Integer localInteger3 = Integer.valueOf(3);
Integer localInteger4 = Integer.valueOf(3);
Integer localInteger5 = Integer.valueOf(321);
Integer localInteger6 = Integer.valueOf(321);
Long localLong = Long.valueOf(3L);
// 缓存池
System.out.println(localInteger3 == localInteger4);
// 超出缓存池范围
System.out.println(localInteger5 == localInteger6);
// 存在a+b数值表达式,比较的是数值
System.out.println(localInteger3.intValue() == localInteger1.intValue() + localInteger2.intValue());
// equals比较的是数值
System.out.println(localInteger3.equals(Integer.valueOf(localInteger1.intValue() + localInteger2.intValue())));
// 存在a+b数值表达式,比较的是数值
System.out.println(localLong.longValue() == localInteger1.intValue() + localInteger2.intValue());
// Long的equals()先判断传递进来的是不是Long类型,而a+b自动装箱的是Integer类型
System.out.println(localLong.equals(Integer.valueOf(localInteger1.intValue() + localInteger2.intValue())));
// ... 最后一句在这里漏掉了,大家应该可以推断出来
}
}