Long與long的區別

Java中數據類型分兩種:

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

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

什麼是包裝類?

在java中有時候的運算必須是兩個類對象之間進行的,不充許對象與數字之間進行運算。因此須要有一個對象,這個對象把數字進行了一下包裝,這樣這個對象就能夠和另外一個對象進行運算了。

好比咱們能夠定義一個類:java

[java] view plain copy
public class Long { 
    int i=0; 
    public Long (int i){ 
        this.i=i; 
    } 
}  


這個Long 就是一個包裝類,它包裝了一個整數值,而後能夠在裏面寫一些運算符重載的方法使它支持某些運算。這個時候能夠賦值:
Long l = new Long(10);
如今變量 l 就是一個對象,不是一個數字。


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

看下面的小demo:this

long l = 1000; 
Long l3 = 1000L;
Long l1 = new Long(1000);
Long l2 = new Long(1000);
        
System.out.println(l==l1);//true 包裝類自動拆箱爲原始數據類型

System.out.println(l==l3);//true  包裝類自動拆箱爲原始數據類型

System.out.println(l3.equals(l1));//true

System.out.println(l3==l1); //false  l3在常量池中 l1在堆內存中

System.out.println(l1.equals(l2));  //true

System.out.println(l1==l2);   //false  


由此也能看出,Long定義的變量爲一個Long類型的對象;而long定義的變量爲一個長整形數值的數值變量。
 
ID用long仍是Long?
 
hibernate、el表達式等都是包裝類型,用Long類型能夠減小裝箱/拆箱;
在hibernate中的自增的hid在實體中的類型要用Long 來定義而不是long。不然在DWR的匹配過程當中會出現Marshallingerror:null的錯誤提示。
 
究竟是選擇Long 仍是long這個還得看具體環境,若是你認爲這個屬性不能爲null,那麼就用long,由於它默認初值爲0,若是這個字段能夠爲null,那麼就應該選擇Long。spa

注意事項hibernate

相關文章
相關標籤/搜索