你知道long和Long有什么區別嗎?


Java中數據類型分兩種:


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

 

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


什么是包裝類?


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


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

 

[java]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. public class Long {  
  2.     int i=0;  
  3.     public Long (int i){  
  4.         this.i=i;  
  5.     }  
  6. }  

 


這個Long 就是一個包裝類,它包裝了一個整數值,然后可以在里面寫一些運算符重載的方法使它支持某些運算。這個時候可以賦值:
Long l = new Long(10);
現在變量 l 就是一個對象,不是一個數字。 



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


看下面的小程序:

 

[java]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. long l = 1;  
  2. Long l1 = new Long(1);   
  3. Long l2 = new Long(1);   
  4.   
  5. if (l == l1){   
  6.     System.out.println("=====l與l1相等=====");  
  7.  }   
  8.   
  9. if(l == l2){   
  10.     System.out.println("=====l與l2相等=====");  
  11. }  
  12.   
  13. if(l1 == l2){  
  14.     System.out.println("=====l1與l2相等=====");  
  15.  }         

 


輸出:

 

[plain]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. =====l與l1相等=====  
  2. =====l與l2相等=====  


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

 

 

[plain]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. =====l與l1相等=====  
  2. =====l與l2相等=====  
  3. =====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。

 

http://blog.csdn.net/liushuijinger/article/details/30726433


免責聲明!

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



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