为什么Integer的比较最好使用equals


为什么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。

猜你喜欢

转载自blog.csdn.net/besto229/article/details/106206999