dream.in.java

          能以不變應(yīng)萬變是聰明人做事的準(zhǔn)則。萬事從小事做起,積累小成功,問鼎大成功,是成功者的秘訣。

          自動(dòng)裝箱trick

          自動(dòng)裝箱trick

          看以下代碼:

          Integer y = 567;
          Integer x =y;
          System.out.println(y==x);
          y++;
          System.out.println(x+" "+y);
          System.out.println(y==x);

          第一個(gè)y==x理所當(dāng)然的是true了,因?yàn)閤和y引用了同一個(gè)Integer對(duì)象。執(zhí)行y++后,自然y就變成568了,那么在這個(gè)時(shí)候y==x是什么值呢?如果你認(rèn)為是true,那就錯(cuò)了。

          y++這個(gè)操作可以分解為3個(gè)操作:拆箱、使用、重新裝箱,相當(dāng)于:

          int x2 = y.intValue();
          x2++;
          y = new Integer(x2);

          因此y在這個(gè)時(shí)候已經(jīng)不是引用原來的那個(gè)對(duì)象,而是引用了一個(gè)新的對(duì)象了。

          再看一個(gè):
          Integer i1 = 1000;
          Integer i2 = 1000;
          if(i1 != i2) System.out.println("different Object");
          if(i1.equals(i2))System.out.println("meaningfully equal");

          毫無疑問,會(huì)打印:
          different Object
          meaningfully equal

          因?yàn)閕1和i2雖然它們的值相同,但引用的并不是同一個(gè)對(duì)象。

          然而:
          Integer i3 = 10;
          Integer i4 = 10;
          if(i3 == i4) System.out.println("same Object");
          if(i1.equals(i2))System.out.println("meaningfully equal");

          會(huì)打?。?br /> same Object
          meaningfully equal

          你也許會(huì)感到有點(diǎn)暈了吧?這是為什么呢?

          Java里面為了節(jié)省內(nèi)存,對(duì)于包裝器的兩個(gè)實(shí)例,當(dāng)他們的基本值相同使,它們總是==的關(guān)系:

          • Boolean
          • Byte
          • 從\u0000到\u007f的字符串
          • -128到127的Short和Integer


          參考:《SCJP考試指南 310-065》http://blog.csdn.net/ZangXT/archive/2008/11/19/3334030.aspx

          posted on 2009-03-19 00:09 YXY 閱讀(94) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 内乡县| 肇源县| 垣曲县| 志丹县| 汉阴县| 莆田市| 凤庆县| 衡水市| 奉新县| 田林县| 图木舒克市| 红河县| 深州市| 库车县| 阜平县| 准格尔旗| 图木舒克市| 库伦旗| 秦皇岛市| 雅江县| 东明县| 博野县| 万宁市| 潜江市| 凌海市| 贡觉县| 大同县| 巴东县| 澜沧| 菏泽市| 牟定县| 南皮县| 嘉定区| 刚察县| 孝义市| 如皋市| 金溪县| 唐河县| 宜宾县| 天等县| 商丘市|