java中包装类与基本类型的运用对比
众所周知,Java是一门oop语言,但是里面还是有8种基本类型。因为“统一”这八个异类,jdk5之后引入了拆箱装箱的概念。
但是我们还是习惯用基本数据类型来定义pojo的一些属性,如:
public class Person1 {
// 姓名
private String name;
// 年龄
private int age;
// 是否成年
private boolean isAdult;
//setter and getter.
//...
}
受公司某位前辈的熏陶和万物皆对象的“荼毒”,决定都使用对象来写,于是:
public class Person2 {
// 姓名
private String name;
// 年龄
private Integer age;
// 是否成年
private Boolean isAdult;
//setter and getter.
//...
}
初看一样,只不过Person1的age初始值是0,isAdult是false;而Person2的age和isAdult是null。
再来看一个例子,现有一个视频Video的pojo类,它有一个属性isDelete是否删除,我们规定1是删除,0是不删除。
如果isDelete是基本数据类型int,则相关业务判断这么写:
if (video.getIsDelete() ==1) {
// do something
}
但是如果isDelete是封装类型Integer,则上述写法是有问题的:1.video.getIsDelete()可能是null,引发Null Pointer Exception;2.对象和基本数据类型不能直接用“==”比较(除了自动装箱拆箱外),也不能无脑的用equals()。
// 一般写法
if (video.getIsDelete() !=null &&1 == video.getIsDelete()) {
// do something
}
// 推荐写法
if (Integer.valueOf(1).equals(video.getIsDelete())) {
// do something
}