包装类型之间的比较以及包装类的缓存机制

Java的Integer类实现了缓存机制,用于-128到127之间的整数,优化性能。在这个范围内,使用==比较即可,否则应使用equals方法。例如,Integera=30和Integerb=newInteger(30)的比较会返回false,因为b是新创建的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在整数包装类型之间值的比较,推荐使用equals;

在Java基本数据类型的包装类型中,大部分都用到了缓存机制来提升性能

Byte、Short、Integer、Long默认创建了数值【-128,127】的相应类型的缓存数据,

character创建了【0,127】范围的缓存数据,Boolean直接返回true或false

Integer缓存源码:
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static {
        // high value may be configured by property
        int h = 127;
    }
}
对于Integer var=?在-128和127之间,就会使用的缓存中的对象,这个区间类的值可以使用==来进行判断,但是这个区间外的值就会创建一个新的对象,此时就推荐使用equals来进行比较;
Integer a = 30;
Integer b = new Integer(30);
System.out.println(a == b);

上面输出的结果为false

a在Integer的缓存机制内,会使用缓存中对象,b是新建的一个对象,所以它们比较的结果就为false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值