java中==/equals与Integer/Long的拆装箱操作

注:大家都知道java中==与equals分别用于比较java对象的内存地址和实际的值,下面的例子中会用到这个两个运算符号。

1.比较-128-127以内的值和这个范围之外的值

Integer a = 1;
Integer b = 1;

Long c = 127L;
Long d = 127L;

Integer e = 321;
Integer f = 321;

Long h = 321L;
Long i = 321L;

System.out.println(a == b);
System.out.println(c == d);
System.out.println(e == f);
System.out.println(i == h);
System.out.println(e.equals(f));
System.out.println(h.equals(i));

输出的结果为:
true
true
false
false
true
true

结果说明:
根据之前的说明==比较的是内存地址,equals比较的是结果值,但是为什么-128127使用==或
equals得出的结果是一样的,其他的数字确不一样?
因为在这个范围内的数字是会从缓存池中获取,不会新建对象,该范围内的数字对象为同一个对象,
所以出会出现上述结果

2.拆箱和装箱与比较运算符==、a.equals

Integer a = 1;Integer b = 2;

Long c = 1L;
Integer e = 3;

Integer h = 321;
Integer j = 322;

Long k = 321L;
Long m = 322L;

System.out.println(a.equals(c));//值相同,类型不同
//编译报错 System.out.println(a  == c);

System.out.println(e.equals(a + b));//类型相同,结果值相同,使用equals比较System.out.println(e == (a + b));//类型相同,结果值相同,使用==比较

System.out.println(j.equals(a + h));//类型相同,结果值相同,使用equals比较
System.out.println(j == (a + h));//类型相同,结果值相同,使用==比较

System.out.println(m == (a + h));//类型不相同,结果值相同,使用==比较
System.out.println(m.equals(a + h));//类型不相同,结果值相同,使用equals比较

System.out.println(m.equals(a + k));//类型不相同进行运算,结果值相同,使用equals比较
System.out.println(m == a + k);//类型不相同进行运算,结果值相同,使用==比较

结果为:

false
true
true
true
true
true
false
true
true

1.第一个结果是false的原因是,Interger的equals方法,会判断类型是否相同,类型不同时直接返回
false
2.第二个结果是true是值相同类型相同,第三个为true的原因是包装类的==在遇到运算符时就进行自动拆箱,
拆箱后为基本数据类型int,直接比较存栈中的值,所以返回true
3.第四、五的结果和二三的结果一致,区别是,该值大于127
4.第六返回的结果为true的原因是使用==遇到了运算符,拆箱成基本数据类型,进行比较,返回ture
5.7返回的结果为false的原因是a+h结果类型是Integer,Long封装类型同样会判断比较的数据类型,所以
返回false
6.8返回的结果是true,说明a+k产生的结果值为封装类型Long
7.9返回的结果是true,拆箱比较

总结:
包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱,以及它们equals()方法不处理数据类型
转换关系,在实际编码中尽量避免这样使用自动装箱和拆箱

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值