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

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

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

    我的蛋殼

    倡導自由、開放、分享的Java技術社區 http://www.javaread.com

     

    新發現,大家都來試試看,有沒有猜對結果

     1 public class AutoBoxingTester {        
     2 public static void judgeEqual(Integer i, Integer j) 
     3 {        
     4 if (i == j) {            
     5 System.out.println("Equal!");        
     6 else {            
     7 System.out.println("Not Equal!");        
     8 }    
     9 }     
    10 public static void main(String[] args){        
    11 Integer i = 100;        
    12 Integer j = 100;        
    13 judgeEqual(i, j);                
    14 Integer a = 255;        
    15 Integer b = 255;        
    16 judgeEqual(a, b);    
    17 
    18 }


    結果是怎樣呢?兩個"Equal"?或者兩個"Not Equal"?猜對了沒有?
    嘿嘿,大家跑一跑的話,可能就會覺得很奇怪了。

     

    答案就先不貼出來,大家先猜一猜,免得破壞興致。
    欲知答案以及分析詳見:
    AutoBoxing與Unboxing細節分析

    本文作者:javaread.com

    posted on 2008-08-19 17:49 javaread.com 閱讀(1848) 評論(14)  編輯  收藏

    評論

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-19 18:13 小笨笨

    好像是2個 相等吧  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-19 18:15 KTOO

    去試了下,發現-128到127間的Integer是Equal,其它的就成了Not Equal了  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-19 18:25

    所以,不要使用==,而是使用Equals來判斷啦

    除了對基本數據類型,==從來是判斷指針的
      回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-19 18:29 bjsuo

    因為Integer對象把-128到127之間的數字預定義成了靜態變量,所以每當生成這個區間的數字的時候,實際上直接返回了預生成的對象,所以
    Integer i = 100;
    Integer j = 100; 實際上i和j是指向的同一個對象而
    Integer i = 255;
    Integer j = 255; 是生成了兩個不同的對象,比較引用是不等的  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果[未登錄] 2008-08-19 18:46 ytl

    第一個不相等第2個相等  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-19 21:11 Hatter Jiang

    這個和JAVA的常量池有關系,有舉的同學可以去google一下JAVA的常量池的信息  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-19 23:13 隔葉黃鶯

    Integer i = 100;

    編譯之后實際的操作是
    Integer i = Integer.valueOf(100);

    再看 valuesOf() 方法就能知道,對于-128到127之間的數字是從緩存中取的,所以==。

    所以拆箱裝箱是編譯器的行為,而非 JVM 的行為。  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-20 00:00 xbloom

    jdk source:
    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache
    return IntegerCache.cache[i + offset];
    }
    return new Integer(i);
    }  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-20 00:27 黑蝙蝠

    原來是這樣~~~ i == j 的時候會調用valueOf嗎?  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-20 00:49 隔葉黃鶯

    i == j
    就是比較,是最基本的操作,不會跑去調用 valueOf()的  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-20 12:35 aaronhe

    Integer i = 100; 這個能編譯通過?  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-20 13:15 々上善若水々

    樓上火星人.  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-23 00:19 飄然

    if (i >= -128 && i <= 127) { // must cache
    return IntegerCache.cache[i + offset];
    }

    所以一般情況下,推薦使用integer.valueOf()方法,盡量不要用new Integer().
    另外這個cache是jdk5.0之后才有的,1.4版本中是沒有的,樓主可以用1.4編譯試試看。

    注意是用jdk1.4編譯,不能用jdk5設置編譯選項為1.4.  回復  更多評論   

    # re: 新發現,大家都來試試看,有沒有猜對結果 2008-08-24 17:09 凌晨風

    這個應該是JDK1.5之后的自動裝箱、拆箱吧!
    -128~127 基本數據類型
    大于127 為對象  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     

    導航

    統計

    常用鏈接

    留言簿(3)

    隨筆檔案

    Java

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费欧洲美女牲交视频| 91在线视频免费91| 亚洲熟伦熟女新五十路熟妇| 亚洲av永久无码天堂网| 成年女人免费v片| 亚洲已满18点击进入在线观看| 91精品免费久久久久久久久| 亚洲第一成年网站大全亚洲| 真实国产乱子伦精品免费| 亚洲精品国产成人| 国产1024精品视频专区免费| 亚洲欧美乱色情图片| 国产男女性潮高清免费网站| 久久水蜜桃亚洲AV无码精品| 一级毛片直播亚洲| 久久久精品视频免费观看| 久久久国产精品亚洲一区| 免费黄色网址网站| 亚洲另类自拍丝袜第五页 | 国产一级黄片儿免费看| 亚洲AV中文无码字幕色三| 亚洲电影免费在线观看| 亚洲人成在线精品| 免费看国产一级片| 久久免费区一区二区三波多野| 亚洲精品人成电影网| 永久黄网站色视频免费观看| 国产精品免费一区二区三区 | 亚洲乱码中文字幕综合234| 99在线热播精品免费99热| 亚洲熟妇色自偷自拍另类| 国产青草视频免费观看97| 成人片黄网站色大片免费观看cn| 久久水蜜桃亚洲av无码精品麻豆| 免费精品人在线二线三线区别 | 亚洲av日韩av高潮潮喷无码| 欧美男同gv免费网站观看| 中国一级全黄的免费观看| 亚洲国产精品久久人人爱| 亚洲AV无码一区二区三区在线观看| 中文字幕无码毛片免费看|