java中包装类和基本类型使用==比较详解

参考博客

案例1

int a = 10;
Integer it1 = new Integer(10);
System.out.println(a == it1);  // ture
// 通过方法进行类型转换
Integer it2 = Integer.valueOf(a);
int i = it1.intValue();

分析:
当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以就是相等的

案例2

int b = -128; // 将-128赋值给b
Integer i1 = -128; // 1.基本类型int -128的变量 2.自动装箱int->Integer
Integer i2 = -128;
Integer i3 = 128;
Integer i4 = 128;
System.out.println(b == i1); // true
System.out.println(i1 == i2); // true
System.out.println(i3 == i4); // false
Integer integer1 = new Integer(-128);
System.out.println(i1 == integer1); // false

分析:
两个Integer==比较,由于都是对象类型,所以不会拆箱比较。
Integer i1 = -128;的第二步自动装箱时,要调用valueOf(),Integer作为常量时,对于-128到127之间的数,会进行缓存。第二次创建i2的时候,直接取出缓存,所以相等。而超出范围就是new了新对象了,所以不等。
valueOf()源码如下:

public static Integer valueOf(int i) {
    // i在[-128,127]之间,直接返回cache,是相同的对象
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    // 否则创建新对象
    return new Integer(i);
}

案例3

Double d1 = 1.0;
Double d2 = 1.0;
Double d3 = 2.0;
Double d4 = 2.0;
System.out.println(d1 == d2); //false
System.out.println(d3 == d4); // false

分析:
valueOf()源码如下:

public static Double valueOf(String s) throws NumberFormatException {
    return new Double(parseDouble(s));
}

案例4:

Integer integer = 128;
int c = integer;
System.out.println(c == integer); // true
System.out.println(integer == c); // true

分析:
int c = integer;自动拆箱,c赋值为10,当Integer与int进行==比较时,Integer就会拆箱成一个int类型。所以为true。

案例4

int d = 10;
Integer integer2 = d;
Integer integer3 = 10;
System.out.println(d == integer2); // true
System.out.println(integer3 == integer2); // true
int e = 128;
Integer integer4 = e;
Integer integer5 = 128;
System.out.println(integer4 == integer5); // false

分析:
同理,这里都是常量的比较。

案例5

Integer integer6 = 128;
Integer integer7 = new Integer(128);
System.out.println(integer6 == integer7); // false

分析:
一个对象类型,一个是常类,存放位置不同。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值