Integer中为什么[-128,127]中的值可以使用==比较

在Java中,对于Integer对象的相等判断,使用equals()方法比较的是值,而使用==则比较的是对象的引用。由于Integer对象在-128到127之间时,Integer.valueOf()方法会缓存这些值,因此相同数值的Integer对象实际上是同一个实例,所以可以用==比较。超出这个范围,每次newInteger都会创建新对象,需要用equals()比较。
摘要由CSDN通过智能技术生成

在判断两个Intger对象是否相等的时候我们一般都是使用equals()方法来比较是否相等,用==则是比较两个对象的地址是否相等,而两个Integer的值在[-128, 127] 之间的时候,可以直接通过==来比较是否相等。那么为什么[-128, 127] 之间的Integer可以直接用==呢?

public class Demo {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;
        System.out.println(i1 == i2);  //输出true
        i1 = 1000;
        i2 = 1000;
        System.out.println(i1 == i2);  //输出false
    }
}

这要从Integer的自动装箱说起。当给一个Intger对象赋常量值的时候,编译器会帮我们自动装箱,会把常量值包装成一个对象,而包装成对象是调用了Integer.valueOf()方法,这个时候我们看看Integer.valueOf()方法做了什么。

可以在方法描述上看见,该方法会将传入的int值包装成Integer对象返回,这个方法默认会缓存-128到127的值。这就意味着当我们赋予一个Integer对象常量值的时候,会调Integer.valueOf()方法返回一个Integer对象,而[-128,127]中的值,使用Integer.valueOf() 方法不会创建新的Integer对象,而是从缓存中获取,所以就是返回ide同一对象,所以可以使用==比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值