zoukankan      html  css  js  c++  java
  • 实体类为什么使用包装类

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

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

    基础知识点:
    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不变,后面如果修改了实体类,依然可以反序列化成功!

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

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

  • 相关阅读:
    css 文本超过指定行数,显示省略号
    CSS 使radio和checkbox框,和文字对齐平行
    C# 使用InputStream接收 解析表单参数
    CSS 控制文本超出宽度,显示省略号
    C# 将http在线文件,保存到服务器指定位置
    C# Get请求
    C# POST请求
    js 使用XMLHttpRequest 上传文件,显示进度条
    js 验证字符长度,一个中文2个字符,英文和数字为1个字符
    iOS Carthage集成SnapKit
  • 原文地址:https://www.cnblogs.com/mingyueyuqingfeng/p/14792045.html
Copyright © 2011-2022 走看看