實體類為什么使用包裝類


以前只是 知其然不知所以然,搞學問搞工作這樣肯定是不行的,今天就來扯一下為什么用包裝類。

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

基礎知識點:
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不變,后面如果修改了實體類,依然可以反序列化成功!

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

以上是個人理解,有不對的地方請加以批評指正,萬分感謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM