2015070201 - EffactiveJava笔记 - 第49条 基本类型优于装箱类型(2)

    基本数据类型只有数值,而装箱类型则具有与他们的值不同的同一性.换个说法,两个装箱类型可以具有相同的值和不同的同一性.

    案例:

    回想比较器compare方法返回值是负数,0,还是整数,要取决于它的第一个参数是小于,等于,大于第二个参数.

    <script src="https://code.csdn.net/snippets/730317.js"></script>

 

   上面案例,被设计用来表示Integer值的递增数字序列.

   严重的缺陷就是naturalOrder.compare(new Integer(2), new Integer(2)),预期效果是0,实际却返回1.,表明第一个数值大于第二个数值.

   问题出自何处呢?问题分析.

   1.naturalOrder,对表达式first < second执行的是拆箱操作,提取基本数据进行比较,如果答案不成立,进行后续操作.

   2.执行计算表达式first ==second,在对象引用的同一性上进行比价,如果first和second引用表示同一个int值,不同内存地址的Integer实例,操作就会返回false,表示第1个值,大于第2个值.

   对基本数据类型的包装类型运用 == 操作符总是错误的行为.

   <script src="https://code.csdn.net/snippets/730318.js"></script>

   那么如何解决这个问题呢?

   根本思路不进行同一性比较,即只进行数值比较,不进行对象之间的地址比较.

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值