java中包装类的比较用法

本文深入探讨了Java中包装类的比较方式,特别是在byte类型范围内使用==和equals()方法的区别。通过实验代码和JDK源码分析,揭示了Integer在不同数值范围内的对象创建机制,强调了equals()方法在包装类比较中的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中包装类的比较用法

 

一、前言

java中 ,包装类是一个对象,也是一个具体的数值。对于对象比较可以用 equals()方法,对于数值的比较可以用 == 进行比较,那么对于包装类该用那种方法比较合适呢?

 

 

二、实验代码如下

 
  1. Integer a1=120;

  2. Integer b1=120;

  3. System.out.println(a1==b1); // true

  4. System.out.println(a1.equals(b1)); // true

  5. System.out.println("<-------分割线 1----------->");

  6.  
  7. Integer a2=133;

  8. Integer b2=133;

  9. System.out.println(a2==b2); // false 注意这个结果不一样。

  10. System.out.println(a2.equals(b2)); // true

  11. System.out.println("<-------分割线 2----------->");

 

三、原因分析

1、通过实验代码可以看到, a2 == b2 的结果与 a1==b1 结果不一样。

 2、 使用java反编译工具,对代码反编译可以看到:( java反编译工具下载

 
  1. 原代码: Integer a1=120;

  2. 编译后: Integer a1 = Integer.valueOf(120);

说明了,包装类在进行直接赋值的时候,底层调用的是 Integer.valueOf()方法,通过查看JDK源码:

 

 

3、可以看到,从jdk1.5开始,Integer提供了一个内部类,IntegerCache , 数值范围在 Integer 
(-128 ~ 127)之间(byte 类型的范围 ),是不会新建对象,调用的是数据缓冲池中的值。

 

四、最终结论

 

总结: 在byte类型范围内, 包装类用 == 和 equals()方法比较值是一样的,超出byte范围, == 即使数值结果

一样,但是 == 返回的false,因为 Integer 底层新建了对象,不是同一个地址值。

 

结论: java中包装类请使用 equals()方法进行比较!

 

 

转载自:https://blog.youkuaiyun.com/HaHa_Sir/article/details/79040981

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值