聲明:本文為部落客轉載文章,原文網址見文末。
/*
* int是java提供的8種原始資料型別之一。 Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類別。 int的預設值為0,
* 而Integer的預設值為null
* ,即Integer可以區分出未賦值和值為0的區別,int則無法表達出未賦值的情況,例如,若要表達出沒有參加考試和考試成績為0的區別
* ,則只能使用Integer
* 。在JSP開發中,Integer的預設值為null,所以用el表達式在文字方塊中顯示時,值為空白字串,而int預設的預設值為0,所以用el表達式在文字方塊中顯示時
* ,結果為0,所以,int不適合作為web層的表單資料的型別。
* 在Hibernate中,如果將OID定義為Integer類型,那麼Hibernate就可以根據其值是否為null而判斷一個物件是否是臨時的
# * ,如果將OID定義為了int類型,還需要在hbm映射檔中設定其unsaved-value屬性為0。
* 另外,Integer提供了多個與整數相關的操作方法,例如,將一個字串轉換成整數,Integer中也定義了表示整數的最大值和最小值的常數。
*/
#1
2
3
|
System.out.println(Integer.valueOf( "127" )==Integer.valueOf( "127" ));
System.out.println(Integer.valueOf( "128" )==Integer.valueOf( "128" ));
System.out.println(Integer.parseInt( "128" )==Integer.valueOf( "128" ));
|
1 | #new Integer(123);
|
1 |
#Integer.parseInt( "123" );
|
解析完字串後傳回一個int
值。
1 |
#Integer.valueOf( "123" );
|
#這種情況比其他的要更複雜一些。首先進行了字串解析,然後如果解析的值位於-128
和127
之間,就會從靜態快取中傳回物件。如果超出了這個範圍,就會呼叫
Integer()
方法並將解析的值作為參數傳入,得到一個新的物件。
現在,讓我們來看看問題中的3個表達式。
1 |
#Integer.valueOf( "127" )==Integer.valueOf( "127" #);
|
#上面的表達式傳回true
,因為Integer
的值從靜態快取中取了2次,表達式傳回了物件與自己比較的結果。因為只有一個Integer對象,所以回傳結果為true
。
1 |
#Integer.valueOf( "128" )==Integer.valueOf( "128" #);
|
上面的表達式傳回false
,因為128
沒有存在靜態緩衝區。所以每次在判斷相等時等式兩邊都會建立新的Integer
物件。由於兩個Integer
物件不同,所以==
只有等式
兩邊代表同一個物件時才會回傳true
。因此,上面的等式返回false
。
1 |
#Integer.parseInt( "128" )==Integer.valueOf( "128" #);
|
#上面的表達式比較的是左邊的原始int
值128
與右邊新建立的Integer
物件。但因為int
和Integer
之間比較是沒有意義的,所以Java在進行比較之前會將Integer
自動拆箱,所以最後進行的是int
和int
值之間的比較。由於128
和自己相等,所以回傳true
。
以上是integer與int區別以及integer.values()方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!