先看幾行**
integer a1 = 100;
integer a2 = 100;
system.out.println("a1==a2:" + (a1 == a2));
integer b1 = 200;
integer b2 = 200;
system.out.println("b1==b2:" + (b1 == b2));
integer c1 = new
integer(100);
integer c2 = new
integer(100);
system.out.println("c1==c2:" + (c1 == c2));
int d1 = 100;
integer d2 = new
integer(100);
system.out.println("d1==d2:" + (d1 == d2));
a1==a2:true
b1==b2:false
c1==c2:false
d1==d2:true
大家的答案是否和顯示的相同呢,如果和你想象的不同,那又是為什麼會產生這種情況呢?
這裡我們重複什麼是包裝型別,什麼是基本型別了。
包裝型別的解釋:
當我們對兩個基本型別進行比較時,jvm是直接比較他們的他們的值
int a = 10;
int b = 10;
system.out.println(a == b);//true
當我們對兩個包裝型別比較時,jvm通過比較他們的位址來判斷是否是同乙個物件。例如下面的而例子,c1和c2都是new出來的新物件,因此c1==c2的值肯定不同,他們只是擁有相同value值的integer物件。
integer c1 = new
integer(100);
integer c2 = new
integer(100);
system.out.println("c1==c2:" + (c1 == c2));//false
當我們對兩個包裝型別比較時,還有一種情況,就是不通過new來建立integer,而是通過jvm自動把int基礎型別轉換成integer物件(下面稱為封包)。如以下例子:
integer a1 = 100;
integer a2 = 100;
system.out.println("a1==a2:" + (a1 == a2));//true
integer b1 = 200;
integer b2 = 200;
system.out.println("b1==b2:" + (b1 == b2));//false
為什麼兩個幾乎一樣的**結果不同呢?讓我們來看下jvm的指令操作:
從上圖可以看出,在封包的過程中其實就是呼叫了integer.valueof()方法把int基本型別轉換成了integer物件。
public
static integer valueof(int i)
在valueof方法中對i進行了判斷,如果在[-128,127]之間會從快取中取出相應的integer物件,而不是重新new乙個integer物件,所以當我們比較100的時候是返回的true,而200則是返回的是false。
4. 當我們把乙個integer和乙個int物件比較時,是通過從integer取出value和int值比較
關於基本型別int與包裝類integer的面試內容
首先integer是int的包裝類,然後int的預設值是0,並且int不能為null,而integer的預設值為null,即integer可以區分出為賦值和值為0的區別,例如 區分未參加考試和參加考試的零分。另外integer提供了多個與整數操作的方法,如將字串轉化為整數 integer.pasei...
PHP基本型別integer
整型值可以使用十進位制,十六進製制,八進位制或二進位制表示,前面可以加上可選的符號 或者 二進位制表達的 integer 自 php 5.4.0 起可用。要使用八進位制表達,數字前必須加上 0 零 要使用十六進製制表達,數字前必須加上 0x。要使用二進位制表達,數字前必須加上 0b。example ...
基本型別和包裝型別 例 int和Integer
1 包裝型別可以為 null,而基本型別不可以 答 所以資料庫模型,字段定義用包裝型別可以避免null值丟擲 nullpointerexception 的異常。但是.參考第5點效率說明 2 包裝型別可用於泛型,基本型別不可以 例 錯誤 listlist new arraylist 提示 syntax...