为什么Integer的比较建议使用equals呢?难得“==”不香吗
1. int与int的比较
int作为8种基础类型之一,值是分配在栈上的。而且基础类型没提供equals方式,只能用“==”。
2. Integer与int的比较
Integer对象分配在堆,比较的时候需要用equals吗?并不需要,“==”依然是真香的。
因为“Integer ==int” 是等同于 Integer.intValue() ==int 的。
public static void main(String[] args) {
System.out.println("5==5: " + test(5,5));
System.out.println("127==127: " + test(127,127));
System.out.println("128==128: " + test(128,128));
}
static boolean test(Integer num1, int num2){
return num1 == num2;
}
3. Integer与Integer的比较
static boolean test(Integer num1, Integer num2){
return num1 == num2;
}
可以看到5和127的比较,“==”依然是真香的。 实际-128到127在Integer.IntegerCache的数组中有做缓存,所以这个范围内的所有Integer的对象都是同一个,即引用地址相同。
4. 结论
Integer与Integer的比较最好使用equals,毕竟不知道什么时候,Integer的值会不在那个范围。
那是不是可以用int不用Integer呢?也是不行的,int默认初始化值位0,Integer为null。