java int 大小吗_你知道Java中数字怎么比较大小吗-百度经验

本文解析了Java Integer对象在[-128, 127]区间内共享常量池的现象,解释了为什么相同区间内的对象使用==比较为true,而区间外则需用equals。讲解了如何在比较时选择equals而非==,并介绍了IntegerCache的工作原理。
摘要由CSDN通过智能技术生成

为什么呢?

原因就出现在常量池了。

如果Integer的值在[-128,127]时,都会从常量池中取。

这样所有这个区间的Integer的对象是完全相同的,使用==比较肯定是true,因为内存地址是一样的的嘛

过了这个区间的,肯定不同了,不同的对象,内存地址不一样了的。

这种情况下,只能使用Equals来比较。

对象之间比较是否相等,一定要使用Equals

来一块看看java.lang.Integer.IntegerCache

private static class IntegerCache {

static final int high;

static final Integer cache[];

static {

final int low = -128;

// high value may be configured by property

int h = 127;

if (integerCacheHighPropValue != null) {

// Use Long.decode here to avoid invoking methods that

// require Integer's autoboxing cache to be initialized

int i = Long.decode(integerCacheHighPropValue).intValue();

i = Math.max(i, 127);

// Maximum array size is Integer.MAX_VALUE

h = Math.min(i, Integer.MAX_VALUE - -low);

}

high = h;

cache = new Integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new Integer(j++);

}

private IntegerCache() {}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值