<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Study java

    一個新手學(xué)習(xí)JavaEE的心得,希望對學(xué)習(xí)JavaEE的朋友有些幫助。

    詭異的autoboxing與unboxing

    前兩天沒有什么事做,仔細(xì)看了一下JAva的拆包,發(fā)現(xiàn)了下面的問題,不是很明白,到網(wǎng)上轉(zhuǎn)了一圈,找到了答案.給需要的朋友看看
    首先看一段代碼(使用JDK 5),如下:
     1 public class Test {
     2 public static void main(String[] args) {
     3 Integer i1 = 127;
     4 Integer i2 = 127;
     5 if (i1 == i2)
     6 System.out.println("Equal!");
     7 else
     8 System.out.println("Not equal!");
     9 }
    10 }

    輸出結(jié)果想必大家也知道,是“Equal!”。現(xiàn)在把i1和i2的值由127改為128看看會發(fā)生什么?結(jié)果輸出“Not equal!”。

    注意i1和i2都是Integer類型,事實上只要這個值的范圍在“-128—127”之間,輸出結(jié)果都是“Equal!”。JDK 5引進(jìn)了很多新的特性,其中有一個就是自動裝箱(Autoboxing)和自動拆箱(Auto-Unboxing)。當(dāng)i1和i2值為128時,在進(jìn)行 “==”時,它們被裝進(jìn)兩個不同的Integer Objects,由于這是兩個不同的instances,它們引用不同的內(nèi)存地址,所以結(jié)果是“Not equal!”。 但當(dāng)這個值是127時,JVM自動將這個值轉(zhuǎn)換成基本類型int,這樣進(jìn)行“==”時,JVM仍然使用的是相同的object instance, 所以輸出結(jié)果為“Equal!”了。


    其實這與'=='運算符的比較有關(guān),'=='可用來比較兩個基本型態(tài)的變量值是否相等,事實上'=='也用于判斷兩個對象變量名稱是否參考至同一個對象。

    所 以'=='可以比較兩個基本型態(tài)的變量值是否相等,也可以判斷兩個對象變量的參考對象是否相同,當(dāng)您如前兩個程序的方式撰寫時,編譯器不知道您實際上要比 較的是哪一種?所以對于值從-128到127之間的值,它們被裝箱為Integer對象后,會存在內(nèi)存之中被重用,所以當(dāng)值在100,使用'=='進(jìn)行比 較時,i1 與 i2實際上參考至同一個對象。

    如果超過了從-128到127之間的值,被裝箱后的Integer對象并不會被重用,即相當(dāng)于每次都新建一個Integer對象,所以當(dāng)值在 200,使用'=='進(jìn)行比較時,i1與i2參考的是不同的對象。


    “Integer i1 = 127;”在JDK1.5下可以編譯通過的,這就是自動裝箱(Autoboxing)和自動拆箱(Auto-Unboxing)。自動裝箱 (Autoboxing)特性讓Java自動包裝一個簡單數(shù)據(jù)類型(例如int)到對應(yīng)的包裝類型中(例如Integer)中。
    在《JSR 201: Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import》中,對這個問題,是作了這樣的規(guī)定:
    If the value p being boxed is true, false, a byte, an ASCII character, or an integer or short number between -127 and 128, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
    在Java中,The following is the list of primitives stored as immutable objects(不可變對象):
    * boolean values true and false
    * All byte values
    * short values between -128 and 127
    * int values between -128 and 127
    * char in the range \u0000 to \u007F

    posted on 2007-05-20 11:53 ronghai 閱讀(395) 評論(0)  編輯  收藏 所屬分類: java新手學(xué)習(xí)

    導(dǎo)航

    <2007年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    城市流浪者

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成年女人免费碰碰视频| 最近免费中文在线视频| 日日AV拍夜夜添久久免费| 亚洲精品色播一区二区| 免费人成视频在线| 亚洲日韩一中文字暮| 日本不卡视频免费| 特级毛片全部免费播放| 亚洲精品一级无码鲁丝片| 成人自慰女黄网站免费大全| 国产亚洲精品福利在线无卡一| 中文在线观看国语高清免费| 久久久久久亚洲精品| 95免费观看体验区视频| 亚洲午夜久久久精品电影院| 最近中文字幕无吗免费高清 | 日本久久久免费高清| 暖暖免费中文在线日本| 亚洲精品无码乱码成人| 91麻豆国产免费观看| 亚洲熟妇无码AV不卡在线播放| 国产一区二区三区免费看| 精品熟女少妇aⅴ免费久久 | 亚洲国产亚洲片在线观看播放| 最近的中文字幕大全免费版| 黄页视频在线观看免费| 亚洲处破女AV日韩精品| 成人免费毛片观看| 久久国产免费直播| 亚洲人成777在线播放| 国产猛烈高潮尖叫视频免费| 中文字幕的电影免费网站| 亚洲熟妇无码久久精品| 免费v片在线观看| 免费无遮挡无码永久视频 | 亚洲综合AV在线在线播放| 1000部拍拍拍18勿入免费凤凰福利| 亚洲av中文无码字幕色不卡 | 亚洲精品美女久久777777| 97视频免费在线| 一区二区三区免费精品视频|