您的位置:首页 > 编程语言 > Java开发

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

2015-07-02 08:13 369 查看
基本数据类型只有数值,而装箱类型则具有与他们的值不同的同一性.换个说法,两个装箱类型可以具有相同的值和不同的同一性.

案例:

回想比较器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>

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

根本思路不进行同一性比较,即只进行数值比较,不进行对象之间的地址比较.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: