基本型別與包裝(裝箱)型別的區別
阿新 • • 發佈:2018-12-20
Java的型別分為兩部分,一個是基本型別(primitive),如int、double等八種基本資料型別;另一個是引用型別(reference type),如String、List等。而每一個基本型別又各自對應了一個引用型別,稱為包裝型別(或裝箱型別,boxed primitive)。裝箱基本型別中對應於int 、double、和boolean的是Integer、Double、Boolean。 基本型別與包裝型別的主要區別在於以下三個方面: 1、基本型別只有值,而包裝型別則具有與它們的值不同的同一性(identity)。這個同一性是指,兩個引用是否指向同一個物件,如果指向同一個物件,則說明具有同一性。(與此類似的還有等同性。)
- Integer g = new Integer(0);
- Integer h = new Integer(0);
- System.out.println(g==h)
Integer g = new Integer(0);
Integer h = new Integer(0);
System.out.println(g==h)
- 1
- 2
- 3
- Integer a = 0;
- Integer b = 0;
- System.out.println(a==b);
這個會輸出什麼呢?別急,再看一段程式碼: [java] view plain copy print?Integer a = 0; Integer b = 0;
System.out.println(a==b);</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre><br>
- Integer d = 128;
- Integer f = 128;
- System.out.println(f==d);
Integer d = 128;
Integer f = 128;
System.out.println(f==d);
- 1
- 2
- int e = 128;
- Integer d = 128;
- System.out.println(e==d);
int e = 128;
Integer d = 128;
System.out.println(e==d);
- 1
- 2
現在來看一段簡單的程式碼:
[java] view plain copy print?- static Integer i;
- publicstaticvoid main(String[] args) {
- if(i == 128){
- System.out.println(”Unbelieveable~”);
- }
- }
static Integer i;
public static void main(String[] args) {
if(i == 128){
System.out.println("Unbelieveable~");
}
}
- 1
- 2
- 3
- 4
- 5
- Long sum = 0L;
- for(long i = 0;i<Integer.MAX_VALUE;i++){
- sum +=i;
- }
- System.out.println(sum);
毫無疑問,這段程式碼能正常執行,但是花費的時間會比較長。因為,在宣告sum變數的時候,一不小心宣告為Long,而不是long。這樣,在這個迴圈當中就會不斷地裝箱和拆箱,其效能也會明顯的下降。如果把Long改為long,那麼經過我的試驗,這段程式碼所花費的時間將只有原來的1/5. 經過這三個比較,貌似感覺基本型別已經完勝了包裝型別。但是在如下三個地方,包裝型別的使用會更合理: 1、作為集合中的元素、鍵和值。 2、在引數化型別中。比如:你不能這樣寫——ArryList<int>,你只能寫ArrayList<Integer>. 3、在進行反射方法的呼叫時。 總之,當可以選擇時候,基本型別是要優先於包裝型別。基本型別更加簡單、更加快速。 源自:http://blog.csdn.net/cynthia9023/article/details/17413375Long sum = 0L;
for(long i = 0;i<Integer.MAX_VALUE;i++){ sum +=i; } System.out.println(sum);</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre><br>