午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

java 自動裝箱與拆箱

 奮斗的小烏龜52 2015-11-25

這個是jdk1.5以后才引入的新的內(nèi)容,作為秉承發(fā)表是最好的記憶,毅然決定還是用一篇博客來代替我的記憶:

java語言規(guī)范中說道:在許多情況下包裝與解包裝是由編譯器自行完成的(在這種情況下包裝成為裝箱,解包裝稱為拆箱);

其實按照我自己的理解自動裝箱就可以簡單的理解為將基本數(shù)據(jù)類型封裝為對象類型,來符合java的面向?qū)ο?;例如用int來舉例:

//聲明一個Integer對象
Integer num = 10;
//以上的聲明就是用到了自動的裝箱:解析為
Integer num = new Integer(10);

以上就是一個很好的體現(xiàn),因為10是屬于基本數(shù)據(jù)類型的,原則上它是不能直接賦值給一個對象Integer的,但jdk1.5后你就可以進行這樣的聲明,這就是自動裝箱的魅力
自動將基本數(shù)據(jù)類型轉(zhuǎn)化為對應(yīng)的封裝類型。成為一個對象以后就可以調(diào)用對象所聲明的所有的方法

自動拆箱:故名思議就是將對象重新轉(zhuǎn)化為基本數(shù)據(jù)類型:

//裝箱
Integer num = 10;
//拆箱
int num1 = num;

自動拆箱有個很典型的用法就是在進行運算的時候:因為對象時不恩直接進行運算的,而是要轉(zhuǎn)化為基本數(shù)據(jù)類型后才能進行加減乘除

Integer num = 10;
//進行計算時隱含的有自動拆箱
System.out.print(num--);

哈哈 應(yīng)該感覺很簡單吧,下面我再來講點稍微難點的,是稍微
看下面一個例子,在看下面一個例子時如果對于 == 與 equal的區(qū)別不清楚的,可以先看http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html

//在-128~127 之外的數(shù)
         Integer num1 = 297;   Integer num2 = 297;           
         System.out.println("num1==num2: "+(num1==num2));                    
         // 在-128~127 之內(nèi)的數(shù) 
         Integer num3 = 97;   Integer num4 = 97;   
         System.out.println("num3==num4: "+(num3==num4)); 

打印的結(jié)果是:num1==num2: false    num3==num4: true 

很奇怪吧:這就歸結(jié)于java對于Integer與int的自動裝箱與拆箱的設(shè)計,是一種模式:叫享元模式(flyweight

為了加大對簡單數(shù)字的重利用,java定義:在自動裝箱時對于值從–128到127之間的值,它們被裝箱為Integer對象后,會存在內(nèi)存中被重用,始終只存在一個對象

而如果超過了從–128到127之間的值,被裝箱后的Integer對象并不會被重用,即相當(dāng)于每次裝箱時都新建一個 Integer對象;明白了吧

以上的現(xiàn)象是由于使用了自動裝箱所引起的,如果你沒有使用自動裝箱,而是跟一般類一樣,用new來進行實例化,就會每次new就都一個新的對象;

這個的自動裝箱拆箱不僅在基本數(shù)據(jù)類型中有應(yīng)用,在String類中也有應(yīng)用,比如我們經(jīng)常聲明一個String對象時:

String str = "sl";
//代替下面的聲明方式
String str = new String("sl");

 

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多