實體類中用基本類型好,還是用包裝類型好?
如果您也考慮這個問題歡迎指正我的觀點,如果您正在考慮這個問題,歡迎評論一起討論一下這個問題
剛才又想到了關於module或者實體類的建立的問題,用基本類型(int,long)好主要是,還是用包裝類型(Integer,Long)好?
在過去很長時間我都自己冥想這個問題,都沒有得到滿意的答案,綜合最近的學習,再考慮一下這個問題.
首先,分析各自的優缺點
基本類型(int,long)
優點
a.用於計算是效率高(effective java書上講過的)
b.不會由於常量池引起比較大小錯誤(例如 java integer對象判斷兩個數字是否相等)
缺點
1.當數據庫中查詢出結果之后封裝結果集時如果返回的值時null時,如果直接賦值給這個基本類型的字段時,會在運行時報出異常,不能將null賦給一個基本類型,而用Integer就不存在這樣都的情況
這個情況好像沒有合適的避免辦法.當沒有默認值的情況下
2.當用spring的表單對象時如果頁面傳來的值是只有字段沒有值是如果表單對象中有基本類型的值時會拋出異常.(可能存在,以前遇到過,記不清了)
缺點的規避方案
設置在數據庫中為該字段設置默認值,但是這經常會被忽略
表單對象不要缺少這個字段,缺少了之后會在request中換取到一個為null的值,當用這個字段沒有在表單中被提交時就會報錯.
包裝類型(Integer,Long)
優點
1.可以存放null,從數據庫中查出值時可能會有null
2.表示一個值(不用於計算,只用於保存值時和int類型一樣);
缺點
不能用於兩個Integer對象雙等判斷兩個對象的值相等,會出現錯誤的.
不適合頻繁(intger.maxvalue次左右)的用於計算,這個缺陷一般項目都遇不到的(猜測)
綜上所述,在建立實體類時,用integer這個包裝類比較好
在數據庫中,數據的默認值是 null,而在 Java 中,基本類型的默認值不是 null,
例如,int 類型的默認值是 0,而包裝類Integer的默認值是 null,因為是對象。
簡單來說就是我們如果自定義了一個Student類,其中有一個屬性成績score,如果用Integer而不用int定義,一次考試,學生可能沒考,值是null,也可能考了,但考了0分,值是0,這兩個表達的狀態明顯不一樣。
用包裝類的時機:
1. 如果這個字段可以為空,那么就用封裝類型,這樣的話可以得到null值 ,而不是 0 或者其它值;
2. 如果使用封裝類型的話,在做比較的時候 ,特別是該屬性的比較時,一定要用equals或者用它們的value來比較, 因為是對象。
Java的八個包裝類:
Boolean、Character、Integer、Byte、Short、Long、Float和Double,
注:除了首字母大寫之外,包裝類與基本類型名字相似。
總結:因為類型默認值的原因,所以這就是為什么數據庫的實體類的屬性要用包裝類而不用基本類型
