实体类为什么使用包装类

以前只是 知其然不知所以然,搞学问搞工作这样肯定是不行的,今天就来扯一下为什么用包装类。

--------------------------------------------------------------------------------------------------------------------------------

基础知识点:
byteshortintlong 的初始化默认值为 0
floatdouble 的初始化默认值为 0.0
char 初始化默认值为 " ",空白格,控制台会打印一个特殊符号显示空白格
boolean 初始化默认值是 false
基础知识点:
包装类 的初始默认值为 null

为什么实体类用包装类不用基本数据类型呢,举个例子,实体类用 Integer 不用 int :

- 因为int如果设为空的话默认为0而Integer为Null,Null对于程序来说比较好控制,可以做空值判断以及对数据做统一处理

- Integer 允许为null值,int默认0,数据库里面如果有个字段没有值可能默认值为null,用Integer比较合适。

- int的默认值为0,而Integer默认值为null。

  数据库中数据存在为空的情况。

  返回数据库字段值是 null 的话,int类型会报错。

  int是基本数据类型,其声明的是变量,而null则是对象。

  所以用integer。

 

 

 

为了避开基本数据类型的坑,阿里巴巴约定实体类不使用基本数据类型!统一使用包装类!

如上是阿里巴巴的开发手册对实体类的要求!必须用包装类型!

接下来看实例:

 

--------------------------------------------------------------------------------------------------------------------------------

再补充一下:序列化!

为什么实体类要 implements Serializable 接口
private static final long serialVersionUID = 1L;

为什么要序列化 ?

首先你不序列化就会报错!

 

序列化:就是把JavaBean对象转成JSON格式的字符串。

反序列化:就是把JSON格式的字符串转化为JavaBean对象。

实现序列化需要和程序打招呼,这个招呼就是一个标记,就是一个空的接口 Serializable 。所以实体类需要 实现  序列化接口,就是和 Java打招呼,给我序列化!

 

serialVersionUID 序列化ID的作用是:控制程序的版本

什么是版本控制,是不是有点蒙 ?

当我让 serialVersionUID 自动生成的时候,我把我的实体类序列化,得到下面的内容(假设生成的ID是 key1)

{
"name": "yangguo",
"age": 20
}

然后,我反序列化得到杨过这个对象(ID是 key1)

name = "yangguo";
age = 20;

 

然后过了一年,杨过有了孩子,我增加了杨过这个实体类的字段

name="yangguo";
age=21;
son="yangkang";

 

然后我去序列化 (ID变成了 key2)

{
"name": "yangguo",
"age": 20,
"son": "yangkang"
}

 

反序列化 (ID是 key1)

这个时候就会报错,反序列化失败。

设置  private static final long serialVersionUID = 1L; 的好处就出来了,保持 serialVersionUID 的值为1不变,后面如果修改了实体类,依然可以反序列化成功!

----------------------------------------------

以上是个人理解,有不对的地方请加以批评指正,万分感谢!

 

posted @ 2021-05-20 23:28  明月予清风  阅读(1797)  评论(0编辑  收藏  举报