2013-07-08 60 views
1

爲什麼Java的擁有這些IntegerCharacter類型和類 同時,他們也適應C'S intchar等 有時,當人們創建陣列,它們往往 使用Integer[] i = {......} 而非int[] i = {....}; 的區別是什麼呢?整數與int類型,哪個更好?

+0

把問題的標題在谷歌。這裏會有很多答案。 – Lion

回答

0

在java中,

  • Integer是一個包裝類,即它是一個objectint是一個原語。
  • Integer默認值是null而INT是0
  • 有自動裝箱和自動拆箱這兩種類型的概念。
  • 整數可以被轉換爲int,反之亦然

Followign程序演示此

public class TestClass { 

    int num; 
    Integer number; 

    public static void main(String[] args) { 

     TestClass testClass = new TestClass(); 
     System.out.println(testClass.num); 
     System.out.println(testClass.number); 
     testClass.autoBoxInt(testClass.num); 

    } 

    public void autoBoxInt(Integer number){ 
     System.out.println(number);  
    } 
} 

輸出是

0 
null 
0 

0聲明System.out.println(testCkass,num)打印int默認值。 System.out.println(testClass.number)打印Integer默認值,即null。當您將testClass.num傳遞給參數爲Integer的方法時,int會自動轉換爲和Integer對象。所以該方法打印出0

Java集合框架使用自動裝箱功能將原語轉換爲包裝類,因爲它們無法獲取原始值。它們使用散列和散列碼幫助快速檢索和存儲對象。下面的例子演示了這種

Set<Integer> numbers = new HashSet<Integer>(); 
numbers.add(new Integer(10)); 
numbers.add(new Integer(4)); 
numbers.add(6); 
numbers.add(-9); 
numbers.add(new Integer(65)); 
System.out.println(numbers); 

這樣就會打印出一套

[4, 65, 6, -9, 10] 

要知道什麼是哈希是和哈希碼是如何使用的,你可以看看這些鏈接 http://www.thejavageek.com/2013/06/27/what-are-hashcodes/ http://www.thejavageek.com/2013/06/26/what-is-the-significance-of-equals-method-in-java/

+0

您的示例還應該包括如何使用自動裝箱將基元放入通用類(如集合)中,然後快速檢索它們。 – hexafraction

+0

@hexafraction感謝您的建議:)我做到了。 –

0

Integer是對象,而int是一個原始的。每當我們將一個int傳遞給一個函數,我們就按原樣傳遞它。

Integer包裝int。在它的情況下,它是不可變的,所以通過引用編輯它不會起作用,但它可以可以被放入到泛型中。這可以設置爲空,而int不可能有任何超出0的值,也可能是您解釋爲空值的特殊值,例如-1Integer.MAX_VALUE

例如,ArrayList<int>是完全無效的,而ArrayList<Integer>必須與包裹整數一起使用。

隨着autoboxing,但是,我們可以馬上添加一個int到一個ArrayList而無需手動包裹它,如果我們需要一個原始的,當我們get()進入,它會自動解開透明它。

在結束時,如果你正在做具有鮮明的變量數量有限或固定陣列的計算,通常應使用int。當與集合,列表或地圖打交道時,你應該聲明集合作爲FooCollection<Integer>然後add(一個int直接允許自動裝箱。

0

IntegerCharacter和其他像這樣的Objectsintchar和其他像這樣的原語。

最大的區別是Object可以是null而原始值不能。

我們推薦使用在那裏你可以,因爲他們使用較少的內存的原始值。

0

我們大致可以說唯一的區別是包裝是primitive客觀再現。

Wrapper classes用於當需要Object來表示原始值。