Integer和int基本型別的比較

2021-08-08 18:56:53 字數 2102 閱讀 4882

先看幾行**

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...