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
	}

原問題連接:http://www.oschina.net/question/727875_148095.net

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

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

JDK 5.0以前都是手動進行包裝類的裝箱和拆箱,以下:對象

int i = 1;//基本數據類型int
Integer j = new Integer(i);//手動裝箱
int k = j.intValue();//手動拆箱

5.0以後能夠自動進行裝箱和拆箱的操做,以下:blog

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。get

在java中,每種基本數據類型都有對應的包裝類,以下:it

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

參考連接:http://jzinfo.iteye.com/blog/450590io

                http://www.jb51.net/article/31934.htm

相關文章
相關標籤/搜索