雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

Java編程

當(dāng)前位置:主頁(yè) > 軟件編程 > Java編程 >

java編程中自動(dòng)拆箱與自動(dòng)裝箱詳解

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:Java編程|點(diǎn)擊:

什么是自動(dòng)裝箱拆箱

基本數(shù)據(jù)類(lèi)型的自動(dòng)裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開(kāi)始提供的功能。

一般我們要?jiǎng)?chuàng)建一個(gè)類(lèi)的對(duì)象實(shí)例的時(shí)候,我們會(huì)這樣:

 Class a = new Class(parameter);

 當(dāng)我們創(chuàng)建一個(gè)Integer對(duì)象時(shí),卻可以這樣:

 Integer i = 100; (注意:不是 int i = 100; )

實(shí)際上,執(zhí)行上面那句代碼的時(shí)候,系統(tǒng)為我們執(zhí)行了:Integer i = Integer.valueOf(100); (感謝@黑面饅頭 和 @MayDayIT 的提醒)

此即基本數(shù)據(jù)類(lèi)型的自動(dòng)裝箱功能。

簡(jiǎn)單一點(diǎn)說(shuō),裝箱就是  自動(dòng)將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為包裝器類(lèi)型;拆箱就是  自動(dòng)將包裝器類(lèi)型轉(zhuǎn)換為基本數(shù)據(jù)類(lèi)型。

下表是基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)的包裝器類(lèi)型:

int(4字節(jié)) Integer
byte(1字節(jié)) Byte
short(2字節(jié)) Short
long(8字節(jié)) Long
float(4字節(jié)) Float
double(8字節(jié)) Double
char(2字節(jié)) Character
boolean(未定) Boolean

基本數(shù)據(jù)類(lèi)型與對(duì)象的差別

基本數(shù)據(jù)類(lèi)型不是對(duì)象,也就是使用int、double、boolean等定義的變量、常量。

基本數(shù)據(jù)類(lèi)型沒(méi)有可調(diào)用的方法。

eg:  int t = 1;     t.  后面是沒(méi)有方法滴。

 Integer t =1; t.  后面就有很多方法可讓你調(diào)用了。

什么時(shí)候自動(dòng)裝箱

例如:Integer i = 100;

相當(dāng)于編譯器自動(dòng)為您作以下的語(yǔ)法編譯:Integer i = Integer.valueOf(100);

什么時(shí)候自動(dòng)拆箱

  自動(dòng)拆箱(unboxing),也就是將對(duì)象中的基本數(shù)據(jù)從對(duì)象中自動(dòng)取出。如下可實(shí)現(xiàn)自動(dòng)拆箱:

Integer i = 10; //裝箱 
int t = i; //拆箱,實(shí)際上執(zhí)行了 int t = i.intValue();

在進(jìn)行運(yùn)算時(shí),也可以進(jìn)行拆箱。

Integer i = 10; 
System.out.println(i++);

Integer的自動(dòng)裝箱

//在-128~127 之外的數(shù)
 Integer i1 =200; 
 Integer i2 =200;     
 System.out.println("i1==i2: "+(i1==i2));          
 // 在-128~127 之內(nèi)的數(shù)
 Integer i3 =100; 
 Integer i4 =100; 
 System.out.println("i3==i4: "+(i3==i4));

輸出的結(jié)果是:

 i1==i2: false
  i3==i4: true

 說(shuō)明:

equals() 比較的是兩個(gè)對(duì)象的值(內(nèi)容)是否相同。

"==" 比較的是兩個(gè)對(duì)象的引用(內(nèi)存地址)是否相同,也用來(lái)比較兩個(gè)基本數(shù)據(jù)類(lèi)型的變量值是否相等。

前面說(shuō)過(guò),int 的自動(dòng)裝箱,是系統(tǒng)執(zhí)行了 Integer.valueOf(int i),先看看Integer.java的源碼:

public static Integer valueOf(int i) {
  if(i >= -128 && i <= IntegerCache.high)  // 沒(méi)有設(shè)置的話,IngegerCache.high 默認(rèn)是127
    return IntegerCache.cache[i + 128];
  else
    return new Integer(i);
}

對(duì)于–128到127(默認(rèn)是127)之間的值,Integer.valueOf(int i) 返回的是緩存的Integer對(duì)象(并不是新建對(duì)象)

所以范例中,i3 與 i4實(shí)際上是指向同一個(gè)對(duì)象。

而其他值,執(zhí)行Integer.valueOf(int i) 返回的是一個(gè)新建的 Integer對(duì)象,所以范例中,i1與i2 指向的是不同的對(duì)象。

當(dāng)然,當(dāng)不使用自動(dòng)裝箱功能的時(shí)候,情況與普通類(lèi)對(duì)象一樣,請(qǐng)看下例:

Integer i3 =new Integer(100); 
 Integer i4 =new Integer(100); 
 System.out.println("i3==i4: "+(i3==i4));//顯示false

總結(jié)

以上就是本文關(guān)于java編程中自動(dòng)拆箱與自動(dòng)裝箱詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:java數(shù)組基礎(chǔ)詳解、java定時(shí)器timer的使用方法代碼示例、Java設(shè)計(jì)模式筆記之抽象工廠代碼示例等,如有什么問(wèn)題,歡迎留言指出,感謝大家!

上一篇:Java編程中的構(gòu)造函數(shù)詳細(xì)介紹

欄    目:Java編程

下一篇:Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例

本文標(biāo)題:java編程中自動(dòng)拆箱與自動(dòng)裝箱詳解

本文地址:http://www.jygsgssxh.com/a1/Javabiancheng/8433.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有