为什么 Java 中 “1000==1000” 为 false,而 ”100==100“ 为 true?

为什么 Java 中 “1000= =1000” 为 false,而 ”100= =100“ 为 true?

看一下代码:

 	Integer a = 1000, b = 1000;
    System.out.println(a == b);//1
    Integer c = 100, d = 100;
    System.out.println(c == d);//2

得到的输出结果为:

false
true

如果两个引用指向同一个对象,那么==返会true,否则则返会false
那么第一条语句返会false,应该不难理解,那为什么第二条语句会返会true呢?
这就要说到Integer.java类了,该类中有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。

所以当我们实例化这样一个对象时:

Integer c = 100;

实际内部是这样的:

Integer i = Integer.valueOf(100);



public static Integer valueOf(int i) {
      if (i >= IntegerCache.low && i
          return IntegerCache.cache[i + (-IntegerCache.low)];
      return new Integer(i);
    }

如果值的范围在-128到127之间,它就从高速缓存返回实例。
所以

Integer c = 100, d = 100;

指向了同一个对象。当然就返会true了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值