菜鳥學Java(二十)——你知道long和Long有什麼區別嗎?

劉水鏡發表於2014-06-15

Java中資料型別分兩種:


1.基本型別:long,int,byte,float,double
2.物件型別:Long,Integer,Byte,Float,Double其它一切java提供的,或者你自己建立的類。


其中Long叫 long的包裝類。Integer、Byte和Float也類似,一般包裝類的名字首寫是數值名的大寫開頭。


什麼是包裝類?


在java中有時候的運算必須是兩個類物件之間進行的,不充許物件與數字之間進行運算。所以需要有一個物件,這個物件把數字進行了一下包裝,這樣這個物件就可以和另一個物件進行運算了。


比如我們可以定義一個類:

 

public class Long {
    int i=0;
    public Long (int i){
        this.i=i;
    }
}

 

這個Long 就是一個包裝類,它包裝了一個整數值,然後可以在裡面寫一些運算子過載的方法使它支援某些運算。這個時候可以賦值:
Long l = new Long(10);
現在變數 l 就是一個物件,不是一個數字。 



long是原始資料型別,沒有屬性方法,只能進行數學運算,Long是long相對應的引用資料型別,它有方法和屬性,一個沒方法屬性,一個有方法屬性,這就是它們的區別。


看下面的小程式:

 

long l = 1;
Long l1 = new Long(1); 
Long l2 = new Long(1); 

if (l == l1){ 
    System.out.println("=====l與l1相等=====");
 } 

if(l == l2){ 
    System.out.println("=====l與l2相等=====");
}

if(l1 == l2){
    System.out.println("=====l1與l2相等=====");
 }    

 

輸出:

=====l與l1相等=====
=====l與l2相等=====

 


如果將第三個if語句的條件換成"l1.equals(l2)",那麼輸出結果就會變成:

 

=====l與l1相等=====
=====l與l2相等=====
=====l1與l2相等=====

 


由此也能看出,Long定義的變數為一個Long型別的物件;而long定義的變數為一個長整形數值的數值變數。

 
ID用long還是Long?

 
hibernate、el表示式等都是包裝型別,用Long型別可以減少裝箱/拆箱;

在hibernate中的自增的hid在實體中的型別要用Long 來定義而不是long。否則在DWR的匹配過程中會出現Marshallingerror:null的錯誤提示。
 
到底是選擇Long 還是long這個還得看具體環境,如果你認為這個屬性不能為null,那麼就用long,因為它預設初值為0,如果這個欄位可以為null,那麼就應該選擇Long。

 
 

相關文章