Integer a=300;
Integer b=300;
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
Integer把-128到127的整数都提前实例化了, 所以你不管创建多少个这个范围内的Integer都是同一个对象,他们的id相同。因为“==”比较的是地址,在上述代码中a、b地址不同。
所以对于-128到127的整数,可以直接用“==”来判断是否相等,对于范围之外的数,使用equals来比较:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
equals方法中获取Integer的基本类型值(intValue)来用 == 比较了。
所以,我们也可以通过Integer.intValue()获取int值来直接比较。
一个int类型可以和Integer直接“==”比较
Integer i = 200;
int j = 200;
System.out.println(i == j);//返回true
综上:
1.如果Integer类型的两个数相等,如果范围在-128~127(默认),可以用“==”比较大小。
2.两个基本类型int进行相等比较,直接用==,因为int类型无equals()函数。
3.一个基本类型int和一个包装类型Integer比较,用==也可,比较时候,Integer类型做了拆箱操作。
4.Integer类型比较大小,要么调用Integer.intValue()转为基本类型用“==”比较,要么直接用equals比较。