實體類中用基本類型好,還是用包裝類型好?
如果您也考慮這個問題歡迎指正我的觀點,如果您正在考慮這個問題,歡迎評論一起討論一下這個問題
剛才又想到了關於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對象雙等判斷兩個對象的值相等,會出現錯誤的.原因見
綜上所述,在建立實體類時,用integer這個包裝類比較好
20161019
今天在寫代碼的時候竟然碰到真的用Integer.valueOf(1).equals(obj);在做判斷,結合Integer的equeals方法想想,這樣做時對的,而且排除了其他類型不正確的數據
參考博客
http://www.2cto.com/kf/201510/447831.html
