dream.in.java

          能以不變應(yīng)萬(wàn)變是聰明人做事的準(zhǔn)則。萬(wàn)事從小事做起,積累小成功,問(wè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)不是引用原來(lái)的那個(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");

          毫無(wú)疑問(wèn),會(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ì)打印:
          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)航:
           
          主站蜘蛛池模板: 颍上县| 镇原县| 柘城县| 类乌齐县| 昌都县| 齐齐哈尔市| 嘉善县| 阳新县| 丰都县| 六枝特区| 承德县| 枣庄市| 鄄城县| 日照市| 平潭县| 四平市| 云和县| 义乌市| 盖州市| 高邑县| 灵璧县| 迁西县| 板桥市| 名山县| 通州市| 乐亭县| 毕节市| 徐州市| 神木县| 赣州市| 循化| 五常市| 永宁县| 临颍县| 格尔木市| 龙岩市| 岐山县| 鹰潭市| 内乡县| 会泽县| 乌恰县|