Integer类型与java的基本类型之间的==与equals()比较结果测试

本文探讨了在Java中Integer类型与Integer以及基本类型之间的比较。当使用==时,Integer在-128到127之间会使用常量池,导致意外结果。建议使用equals()方法进行值比较,以避免错误。Integer与基本类型比较时,==会自动拆箱,而equals()会进行值比对。编译器的警告可能并不准确,需要结合实际运行结果分析。
摘要由CSDN通过智能技术生成

一、Integer与Integer的比较

在使用Integer类型时,常常会不经意就使用==来做判断条件,但是下面的代码就出乎了我们的意料:

Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println("a==b:\t"+(a==b));
System.out.println("c==d:\t"+(c==d));

我们预期的结果是不是 true true?

实际结果:

为什么会产生这样的问题?

是因为在java常量池中默认缓存了-128~127之间的整数,当Integer类型的对象值在此区间时,对象会直接去读取常量池的值,所以使用==比较时他们都指向同一个地址,但是一旦超出这个范围,Integer就会创建一个新的对象,这时两个Integer对象的地址就不同了,因此结果为false。

换种方式,我们使用Integer对象的equals方法再试一试:

Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;

System.out.println("a==b:\t"+(a==b));
System.out.println("c==d:\t"+(c==d));
System.out.println("a.equals(b):\t"+a.equals(b));
System.out.println("c.equals(d):\t"+c.equals(d));

这次的结果应该很明显了,equals()比较的是两个对象中的值,输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值