天天看點

Java通過包裝渲染_Java包裝類的自動裝箱和拆箱

在讨論區中看到這樣一個問題:

public static void main(String[] args) {

Integer i  = 200;

Integer j = 200;

System.out.println(i == j); //false

System.out.println(200 == i); //true

}

第一個輸出的結果為false,而第二個輸出的結果為true。

注意 i 和 j 都不是基本的資料類型,而是類Integer的對象,這其中便涉及到java的自動裝箱和拆箱的機制。

JDK 5.0之前都是手動進行包裝類的裝箱和拆箱,如下:

int i = 1;//基本資料類型int

Integer j = new Integer(i);//手動裝箱

int k = j.intValue();//手動拆箱

5.0之後可以自動進行裝箱和拆箱的操作,如下:

Integer i = 1;//自動裝箱

int j = i;//自動拆箱

Integer i = 10;

System.out.println(i--);//10,計算時的自動拆箱

Integer a = 95;

Integer b = 95;

System.out.println("a==b:" + (a==b));//a==b:true

但是,如下程式輸出的結果并不是一樣的:

Integer a = 295;

Integer b = 295;

System.out.println("a==b:" + (a==b));//a==b:false

這是因為在自動裝箱的時候,-128到127的值被裝箱成Integer對象存在記憶體中是可以被重用的,是以第一個比較結果會輸出true,而超出以上範圍的數值裝箱後的對象并不會被重用,那麼就相當于new兩個Integer對象,比較的結果自然是false。

在java中,每種基本資料類型都有對應的包裝類,如下:

INDEX

基本資料類型

包裝類

1

int

Integer

2

char

Character

3

float

Float

4

double

Double

5

byte

Byte

6

short

Short

7

long

Long

8

boolean

Boolean