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

}

你可能感兴趣的:(java中包装类与基本类型的运用对比)