Java Bean 使用包裝類型 還是基本類型


參考:實體類中用基本類型好,還是用包裝類型好_ - 牽牛花 - 博客園

int優缺點

優點:

1.用於Bean的時候,有默認值。比如自己拼接sql增加一個User時,會方便很多,不過現在都用ORM框架,所以這也不算是優點啦。

2.兩個值比較方便,使用 == 就可以了。

缺點:

  //錯誤
  int a1 = (Integer) null;
  //錯誤
  boolean x1 = (Boolean)null;
  //正確
  Integer a2 = (Integer) null;
  Boolean x2 = (Boolean)null;

阿里巴巴開發手冊中寫的很明確,基本類型接收NULL值有NPE風險(java.lang.NullPointerException  NPE 空值異常),而且默認值和NULL值不能傳達同一種信息。

 

Integer優缺點

優點:可以存放null,從數據庫中查出值時可能會有null

缺點:Intege不能使用 == 比較相等。

        Integer i1 = 127;
        Integer i2 = 127;
        Integer i3 = 128;
        Integer i4 = 128;
        /**
         *   public static Integer valueOf(int i) {
         if (i >= IntegerCache.low && i <= IntegerCache.high)
         return IntegerCache.cache[i + (-IntegerCache.low)];
         return new Integer(i);
         }
         */
        System.out.println("  i1 == i2 "+(i1 == i2));//true
        System.out.println("  i3 == i4 "+(i3 == i4));//false
        int i6 = 127;
        int i7 = 127;
        int i8 = 128;
        int i9 = 128;
System.out.println(
" i6 == i7 "+(i6 == i7));//true System.out.println(" i8 == i9 "+(i8 == i9));//true System.out.println(" i1 == i6 "+(i6 == i1));//true 與 int 類型的比較都是值比較 System.out.println(" i8 == i3 "+(i8 == i3));//true int i10 = new Integer(128); int i11 = new Integer(128); System.out.println(" i10 == i11 "+(i10 == i11));//true Integer i12 = new Integer(127); Integer i13 = new Integer(127); System.out.println(" i12 == i13 "+(i12 == i11));//false 對象地址比較

把int類型賦值給Integer類型。此時,int類型變量的值會自動裝箱成Integer類型,然后賦給Integer類型的引用,這里底層就是通過調用valueOf()這個方法來實現所謂的裝箱的。
把Integer類型賦值給int類型。此時,Integer類型變量的值會自動拆箱成int類型,然后賦給int類型的變量,這里底層則是通過調用intValue()方法來實現所謂的拆箱的。

Integer 和 int 進行比較分三情況
1、Integer與int類型的比較
      這里就無所謂是誰與誰比較了,Integer == int與int == Integer的效果是一樣的,都會把Integer類型變量拆箱成int類型,然后進行比較,相等則返回true,否則返回false。同樣,拆箱調用的還是intValue()方法。
2、Integer之間的比較
      這個就相對簡單了,直接把兩個引用的值(即是存儲目標數據的那個地址)進行比較就行了,不用再拆箱、裝箱什么的。

  值得注意的是:如果為Integer=某個數值這種情況的, Integer之間的比較,JVM會自動緩存-128~127范圍內的值,所以所有在這個范圍內的值相等的Integer對象都會共用一塊內存,而不會開辟多個;超出這個范圍內的值對應的Integer對象有多少個就開辟多少個內存。

 

3、int之間的比較

這個也一樣,直接把兩個變量的值進行比較。

 


免責聲明!

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



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