JAVA中int 和 Integer 有什麼區別,爲什麼要有包裝類

Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。int 是 java 的原始數 據類型,Integer 是 java 為 int 提供的封裝類。Java 為每個原始類型提供了封裝類。

原始類型 封裝類,

char Character,

short Short,

int Integer,

long Long,

double Double

引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有 不同的特徵和用法,它們包括:大小和速度問題。

大小:

對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關。我們可以通過[封裝類]..MAX_VALUE(); 來獲取最大範圍的數值,但是封裝類始終比原始類型多一個null;

int的默認值為 0,而 Integer的默認值為 null,即Integer可以區分出未賦值和值為 0 的區別,int 則無法表達出未賦值的情況,例如,要想表達出沒有參加考試和考試成績為 0 的區 別,則只能使用 Integer。在 JSP開發中,Integer的默認為 null,所以用 EL 表達式在文本 框中顯示時,值為空白字符串,而int默認的默認值為0,所以用EL表達式在文本框中顯示時, 結果為 0,所以,int 不適合作為 web 層的表單數據的類型。

在 Hibernate 中,如果將屬性 id 定義為 Integer 類型,那麼 Hibernate 就可以根據其 值是否為 null 而判斷一個對象是否是臨時的,如果將 id 定義為了 int 類型,還需要在 hbm 映 射文件中設置其 unsaved-value 屬性為 0。

另外,Integer 提供了多個與整數相關的操作方法,例如,將一個字符串轉換成整數, Integer 中還定義了表示整數的最大值和最小值的常量。

第一,基本數據類型之間的相互轉換不是都可以制動轉換的,而你強制轉換又會出問題,比如String類型的轉換為int類型的,那麼jdk為了方便用戶就提供了相應的包裝類。

例子:

public class Integer{

private int i;

public Integer(int a){

i =a;

}

public static int parseToInt(){

return i;

}

public static Integer valueOf(String str){

//封裝一系列的邏輯最終將str轉換成int類型的IntegerStr

return new Integer(IntegerStr);

}

}

上面是jdk關於Integer的一個例子 比如Integer intg = Integer.valueOf(str); int i = intg.parseToInt();

這樣用戶就很方便的完成了 String和int的轉換 這樣就方便了用戶

第二,有時候一個函數需要傳遞一個Object的變量 而你想傳遞int類型的進去顯然不行,怎麼辦呢,用到了包裝類。

public void test(Object obj){

}

你想傳遞5進去就可以這樣

test(new Integer(5));

綜上所述,包裝類有三個用法 一個實現基本類型之間的轉換 二是便於函數傳值 三就是在一些地方要用到Object的時候方便將基本數據類型裝換


分享到:


相關文章: