新聞中心
Java作為面向?qū)ο笳Z(yǔ)言,有人認(rèn)為所看到的都是對(duì)象,事實(shí)上,在Java SE 5之前,基本類(lèi)型默認(rèn)并不是采用對(duì)象存在的如果您想要把基本類(lèi)型作為對(duì)象來(lái)處理,就必須自行轉(zhuǎn)換,不過(guò),在Java SE 5之后,為基本數(shù)據(jù)類(lèi)型提供了自動(dòng)裝箱和拆箱功能,使得將基本類(lèi)型轉(zhuǎn)換為對(duì)象變得極其便捷。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比邵武網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式邵武網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋邵武地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
- 在這里來(lái)捋一捋java的基本數(shù)據(jù)類(lèi)型,不理不要緊,一理才發(fā)現(xiàn)俺也掌握的不是那么明確,在這里俺也再次學(xué)習(xí)下
- 總計(jì)有八個(gè),分別是
- byte字節(jié)型(一個(gè)字節(jié)),char字符型(兩個(gè)字節(jié)),short短整型(兩個(gè)字節(jié)),int整型(四個(gè)字節(jié)),
- long長(zhǎng)整型(八個(gè)字節(jié)),float浮點(diǎn)型(四個(gè)字節(jié)),double 雙精度浮點(diǎn)型(八個(gè)字節(jié)),boolean型(一個(gè)字節(jié))
在javase5之前,如果想要把基本數(shù)據(jù)類(lèi)型作為對(duì)象來(lái)操作,就需要采用對(duì)應(yīng)的對(duì)象,來(lái)把它們打包才行
現(xiàn)在雖然不用這樣了,但其中也有一些要注意的地方,俺揪出來(lái)曬曬。
先說(shuō)說(shuō)類(lèi)和對(duì)象,建立個(gè)概念吧先
- 類(lèi)--可以認(rèn)為是對(duì)象的設(shè)計(jì)圖
- 對(duì)象--是按照設(shè)計(jì)圖實(shí)現(xiàn)了的具體工具
- 先這么簡(jiǎn)單理解吧,如果真要扯開(kāi)了說(shuō),那可是軟件工程里面的一門(mén)專業(yè)課,我們有個(gè)概念就好
之所以要將基本類(lèi)型數(shù)據(jù)打包成為對(duì)象,原因很簡(jiǎn)單,是因?yàn)閷?duì)象可以攜帶更多的數(shù)據(jù)。
手動(dòng)、自動(dòng)裝箱拆箱示例
Long,Integer,Double,F(xiàn)loat,Boolean等等的類(lèi)就是所謂的wrapper類(lèi),就跟wrapper這個(gè)單詞所代表的意思一樣,就是提供一個(gè)“包裝,加殼”,把基本數(shù)據(jù)類(lèi)型放在里面,來(lái)看代碼,體會(huì)下先
- public class WrapperDemo{
- public staticvoid main(String[] args){
- int data1=21;
- int data2=24;
- //打包成為對(duì)象
- Integer data1Wrapper = new Integer(data1);
- Integer data2Wrapper = new Integer(data2);
- //原始數(shù)據(jù)直接除以3
- System.out.println(data1/3);
- //將數(shù)據(jù)打包,轉(zhuǎn)換為double型,除以3
- System.out.println(data1Wrapper.doubleValue()/3);
- //比較
- System.out.println(data1Wrapper.compareTo(data2Wrapper));
- }
- }
圖1-1 WrapperDemo的運(yùn)行結(jié)果
通過(guò)上面的代碼和運(yùn)行結(jié)果,看到了將基本數(shù)據(jù)類(lèi)型打包成為對(duì)象帶來(lái)的好處了吧,別著急,這還只是javase5之前的做法,在javase5之后就已經(jīng)支持自動(dòng)裝箱和拆箱了,在這,就不再單獨(dú)寫(xiě)代碼出來(lái)了,只寫(xiě)幾個(gè)能說(shuō)明問(wèn)題的語(yǔ)句就可以了,相信很容易理解的。
- javase5之前,手動(dòng)打包
- Integer data1 = new Integer(10);
- 事項(xiàng)將基本類(lèi)型數(shù)據(jù)轉(zhuǎn)換為對(duì)象
- javase5之后,支持自動(dòng)打包
- Integer data1 = 10;
- 便可以實(shí)現(xiàn)將基本類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為對(duì)象
- eg:
- 在上面的代碼中,可以采用,可以直接進(jìn)行兩個(gè)基本數(shù)據(jù)類(lèi)型的比較
- data1.compareTo(data2);
- 基本數(shù)據(jù)類(lèi)型本身沒(méi)有什么方法,當(dāng)你運(yùn)行之后會(huì)發(fā)現(xiàn),它仍然可以正確運(yùn)行,這就自動(dòng)裝箱和拆箱帶來(lái)的好處
再來(lái)說(shuō)說(shuō)自動(dòng)裝箱拆箱
自動(dòng)裝箱和拆箱,從本質(zhì)上講,是編譯器幫了我們的忙,這就是所謂的“編譯器蜜糖”,既然這么好,是不是就可以放心的用了呢?
先別著急,喝口水,咱再接著嘮
看看下面的情況,您是否了解
- Integer i = null;//表明i沒(méi)有參考至任何對(duì)象
- int j = i ;//相當(dāng)于 int j = i.intValue()
- 這樣的代碼,編譯時(shí)是可以通過(guò)的,因?yàn)樗恼Z(yǔ)法是正確的,但在運(yùn)行時(shí),就會(huì)排除NullPointerException錯(cuò)誤,這是由于i并沒(méi)有參考至任何對(duì)象造成的
- 個(gè)人建議,如果您對(duì)裝箱拆箱不是理解的很清楚,***還是按部就班的一步一步的對(duì)它進(jìn)行裝包和拆包,這樣,有的時(shí)候,可能會(huì)為你節(jié)省很多糾錯(cuò)的時(shí)間哦
還是自動(dòng)裝箱拆箱
- public class BoxDemo{
- public static void main(String[] args){
- Integer data1 = 500;
- Integer data2 = 500;
- System.out.println(data1==data2);
- }
- }
在你看到接下來(lái)的運(yùn)行結(jié)果前,您先猜猜看,運(yùn)行的結(jié)果會(huì)是怎樣的呢?true or false?
圖1-2 BoxDemo運(yùn)行結(jié)果
false?沒(méi)錯(cuò),它就是false,自動(dòng)裝箱時(shí),對(duì)于值從-128-127之間的數(shù),被裝箱后,會(huì)被放在內(nèi)存中進(jìn)行重用,
如果超出了這個(gè)值的范圍就不會(huì)被重用的,所以每次new出來(lái)的都是一個(gè)新的對(duì)象,結(jié)果自然會(huì)是false。
- 在這里,區(qū)別一個(gè)概念“==”和equals()
- “==”是比較兩個(gè)對(duì)象是不是引用自同一個(gè)對(duì)象。
- “equals()”是比較兩個(gè)對(duì)象的內(nèi)容。
- 這個(gè)一定得搞清楚,否則,在遇到問(wèn)題的時(shí)候,可真是會(huì)讓人抓狂的。
網(wǎng)頁(yè)題目:談?wù)凧ava的自動(dòng)裝箱和拆箱
文章出自:http://www.fisionsoft.com.cn/article/coisjcj.html


咨詢
建站咨詢
