java128陷阱

public class Test {
	public static void main(String[] args) {
		Integer a = 128;
		Integer b = 128;
		System.out.println(a==b);
	}	
}

这时我们写的几行代码,现在我们来运行一下
在这里插入图片描述
结果居然是false,这是为什么呢?

注意这里我们使用的是Integer而不是int,Integer在内部为我们封装了一层判断,用来自动装箱和拆箱。什么意思呢?因为-128~127是平时比较常用的数,为了加快Integer的性能,如果我们直接给Integer赋这个范围内的值的话,Integer会直接创建一个int去赋值,这样的话,相当于用两个int去比较,结果会返回true。如果像我们的代码中这样声明范围以外的值的话,才会去创建两个Integer对象,此时拿去比较的是两个对象的地址,由于是两个对象,地址肯定是不同的,因此这里会返回false。

那么如果我们就是想比较两个范围外的值是否相等怎么办?
那就用equals方法,Integer自己重写了equals方法,因此,如果我们:

public class Test {
	public static void main(String[] args) {
		Integer a = 128;
		Integer b = 128;
		System.out.println(a==b);
		System.out.println(a.equals(b));
	}	
}

在这里插入图片描述
就可以看到,现在比较出来的就是相等了。

猜你喜欢

转载自blog.csdn.net/qq_37856300/article/details/84067344
128