关于Integer对象的比较

先来看一段代码:
public class Test20110712 {

public static void main(String[] args) {
Integer i = 3;
Integer j = i;
i++;
Integer a = 5;
Integer b = 6;
a++;
Integer m = 127;
Integer n = 128;
m++;
System.out.println(i==j); //false
System.out.println(a==b); //true
System.out.println(m==n); //false
}
}

奇怪了,看完这段代码,这是怎么回事?==是比较对象引用吗,那i==j怎么会为false,难道==比较的对象的值,a==b好像支持这一观点,咦,那m==n怎么又成了false了,真是把我搞晕了。

有什么办法,上网查资料。经过一段时间的网搜,终于有眉目了。看完下面一段话,豁然开朗,==比较的还是对象的引用,只不过封装类有自动装箱和拆箱在搅乱。

下面是网上的一段解释:

对于如下范围内的简单数据类型:

*
boolean类型的值
*
所有byte类型的值
*
在-128~127之间的short类型的值
*
在-128~127之间的int类型的值
*
在/u000~/u007F之间的char类型的值

它们在使用自动装箱转换成相关封装类型对象的时候,其行为也和String型类似。在上面列表范围中的数据在进行自动装箱的时候,将首先检查内存中是否已经有使用自动装箱产生的具有相同值的对象。如果已经有一个“值”相同的对象存在,那么并不会产生新的对象。这个机制和使用String s=“test”这种方式产生一个字符串对象类似。也就是说,当简单类型的数据列表中的数据类型和对应范围内的值的时候,使用自动装箱得到的对象可能是已经在内存中存在的,而不是新产生的,就跟String类型数据一样。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值