麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

體驗(yàn)J2SE 1.5新特性之裝箱和拆箱

2019-11-17 06:16:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  J2SE 1.5提供了“Autoboxing”和“Auto-Unboxing”的機(jī)制,可以讓編譯器來(lái)自動(dòng)完成在基本類(lèi)型和它們的包裹對(duì)象之間的轉(zhuǎn)化工作,從而能夠用一種更簡(jiǎn)單的方式,來(lái)避免同時(shí)存在兩套類(lèi)型系統(tǒng)所帶來(lái)的一些麻煩。
本文介紹Autoboxing/Auto-Unboxing機(jī)制的使用方法、實(shí)質(zhì)、發(fā)生時(shí)機(jī)、局限、對(duì)重載機(jī)制的影響以及對(duì)性能的妨礙等問(wèn)題。
 
  傳統(tǒng)上,在java程序中,可以往一個(gè)容器類(lèi)(無(wú)論是Collection還是Map)里直接放入一個(gè)對(duì)象;但是假如打算放入的是一個(gè)數(shù)字、字符或布爾值的話,就要先加入一個(gè)“生成包裹它們的對(duì)象”的步驟。
  造成這種現(xiàn)象的原因是,在Java語(yǔ)言當(dāng)中一直存在著兩套非常不同的類(lèi)型系統(tǒng):

  一套是所謂的“引用類(lèi)型”(Reference Types),包括所有的類(lèi)和接口。這些類(lèi)型的數(shù)據(jù)被看作對(duì)象,所以可以用一個(gè)Object型的變量來(lái)保存。

  一套是所謂的“基本類(lèi)型”(PRimitive Types),包括:byte、short、int、long、float、double、char和boolean。這些類(lèi)型的數(shù)據(jù)不是對(duì)象,因此也不能用Object型的變量來(lái)保存。

  同時(shí)采用這樣兩套類(lèi)型系統(tǒng),可以得到一些性能方面的好處——因?yàn)榛绢?lèi)型的數(shù)據(jù)不是對(duì)象,所以創(chuàng)建得更快、占用的空間更少、收回它們占用的資源也更輕易;但是,這樣的做法同時(shí)也會(huì)造成一些編碼方面的問(wèn)題——例如,不能定義一個(gè)變量(或數(shù)組),讓它既能保存基本類(lèi)型的數(shù)據(jù),又能保存引用類(lèi)型的數(shù)據(jù)(類(lèi)似的,也不能定義一個(gè)同時(shí)能匹配這兩種類(lèi)型的數(shù)據(jù)的形參,不過(guò)這個(gè)問(wèn)題可以借助Java里的重載機(jī)制往返避)。

  實(shí)際上需要定義“不知道用來(lái)保存什么類(lèi)型的數(shù)據(jù)”的變量(和形參)時(shí),一般對(duì)這個(gè)問(wèn)題采取回避的態(tài)度,將它們的類(lèi)型定義成Object,然后借助可以稱(chēng)為“Boxing”和“Unboxing”的操作來(lái)解決Object不能涵蓋基本類(lèi)型的問(wèn)題。

  1. Boxing和Unboxing操作

  所謂Boxing操作,是指通過(guò)生成一個(gè)能包裹基本類(lèi)型數(shù)據(jù)的對(duì)象,來(lái)讓基本類(lèi)型的數(shù)據(jù)出現(xiàn)在只能接受引用類(lèi)型的地方。

  清單1:手工Boxing的典型情況

Collection integers = new ArrayList();
for(int i = 0; i < 10; i++) {
integers.add(new Integer(i));
}
  用于生成這些的對(duì)象的類(lèi),被稱(chēng)作“包裹類(lèi)”(Wrapper Classes)。Java中的包裹類(lèi)有Byte 、Short、Integer、Long、Float、Double、Character和Boolean(都在java.lang包里定義)等八種,分別用于包裹byte、short、int、long、float、double、char和boolean類(lèi)型的數(shù)據(jù)。

  而所謂Unboxing操作,則是指調(diào)用包裹類(lèi)對(duì)象的相應(yīng)方法,得到它們所代表的“基本類(lèi)型的數(shù)據(jù)”,以便進(jìn)行進(jìn)一步的處置。

  清單2:手工Unboxing的典型情況

for(Iterator itr = integers.iterator(); itr.hasNext(); ) {
Integer i = (Integer) itr.next();
System.out.println(i.intValue() + 1);
}
  而在Java語(yǔ)言的最新版本——J2SE 1.5中,提供了“Autoboxing”和“Auto-Unboxing”的機(jī)制,可以讓編譯器來(lái)自動(dòng)完成這些瑣碎的操作,從而用一種更簡(jiǎn)單的方式,來(lái)整合兩套類(lèi)型系統(tǒng)。

  熟悉的生疏名詞

  盡管這一對(duì)操作的歷史很悠久,但是把它們稱(chēng)作“Boxing”和“Unboxing”的做法,基本是在出現(xiàn)“Autoboxing”和“Auto-Unboxing”的概念之后,才得到了廣泛的接受。在那之前,它們似乎并沒(méi)有通用的、專(zhuān)門(mén)的名字。不過(guò)由于那時(shí)也很少提及這兩個(gè)概念,所以這個(gè)問(wèn)題倒也沒(méi)有造成什么嚴(yán)重的影響。

  2. 使用Autoboxing和Auto-Unboxing

  使用Autoboxing和Auto-Unboxing,并不需要什么非凡的步驟,一切都會(huì)在編譯器的安排下自動(dòng)發(fā)生。

  現(xiàn)在可以這樣來(lái)對(duì)待一個(gè)int型的數(shù)據(jù):

  清單3:自動(dòng)完成的Boxing操作

Collection al = new ArrayList();
al.add(1);
  因?yàn)榫幾g器會(huì)靜靜的把這段代碼轉(zhuǎn)換成接近這個(gè)樣子:

  清單4:作了Autoboxing之后的等價(jià)形式

Collection al = new ArrayList();
al.add(Integer.valueOf(1));
  這里所用的能接受int類(lèi)型的值為參數(shù),生成Integer實(shí)例的valueOf方法,是J2SE 1.5中新加入的內(nèi)容。其它包裹類(lèi)也都有可以接受對(duì)應(yīng)的基本類(lèi)型的值為參數(shù),生成對(duì)應(yīng)的包裹類(lèi)實(shí)例的valueOf方法加入。

  而這樣對(duì)待一個(gè)Integer型的對(duì)象也是可以的:

  清單5:自動(dòng)完成的Unboxing操作

Integer one = new Integer(1);
int two = one + 1;


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费特黄| 成人三级免费电影 | 高清成人在线 | 国产成人在线看 | 成年免费在线视频 | 成人激情在线 | 干少妇av| 国产精品成人一区二区三区电影毛片 | 国产精品一区在线看 | 羞羞网站在线观看入口免费 | 久草久视频| 国产精品一区二区三区在线 | 久久吊 | 色播视频网站 | 1314av| 久久久入口 | 久久综合九色综合久久久精品综合 | 国产午夜免费福利 | 成人在线视频免费播放 | 国产亚色 | 国产一区二区三区四区五区精品 | 国产精品刺激对白麻豆99 | 久章草影院 | 久久久久久久久久久影视 | www嫩草| 成人午夜在线免费观看 | 毛片a片免费看 | 69性欧美高清影院 | 依依成人精品视频 | 羞羞草视频 | 欧美视频一区二区三区四区 | 久久视频精品 | 一级免费在线视频 | 日韩电影一区二区 | 在线观看国产一区二区三区 | 欧美日韩成人一区二区 | 色97色| 99精品热视频 | 最新亚洲国产 | 韩国三级日本三级香港三级黄 | 国产精品视频一区二区三区四 |