包装类型自动转基础类型问题

日期:2019-01-15       浏览:469

一 问题

Java中判断两个变量是否相等的方式有多种,如下表:
# 变量a 变量b 比较方法 安全
1 Integer Integer a.equals(b) Y
2 int int a == b Y
3 Integer int a == b N
4 Integer int a.intValue() == b N
5 Integer int Integer.valueOf(b).equals(a) Y
为什么3、4这两种方式是不安全的呢?其实这两种方式存在的问题是相同的,包装类型Integer 在遇到比较符==时是会转基本数据类型int的,3的背后实现方式就是4。如果变量a是null,这时a.intValue()就会报NullPointerException,这就是内在的隐患。
不仅仅是Integer,所有的包装类型都存在这种问题。

二 解决方法

那到底项目中是否推介包装类型呢,答案是yes,并且不推介用基本数据类型。为什么呢?因为基本数据类型在对象初始化的时候JVM会赋一个默认值,而有些业务场景下我们可能并没有给这个变量赋任何值,这个时候这个默认值可能就会bug的源头所在。
具体场景
  • WEB层请求的参数
  • RPC层请求的参数
  • DAO层的实体类
  • BO等中间业务模型
以上的实体类中的属性类型最好都用包装类型。因为代码的不严谨导致的NullPointerException可以在第一时间发现并解决,因为默认值的bug可能会长时间发现不了并且导致大量脏数据的存在。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录