mashiguang

          小馬快跑

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 60 評論 :: 0 Trackbacks
          自JDK1.0開始就存在包裝器類,但是在JDK5.0之前,必須手工地插入打包和拆包的代碼.
          JDK5.0中就有了自動打包功能,但在5.0中自動打包時存在一些差異,剛才看《java核心技術(shù)第7版》時才發(fā)現(xiàn).

          代碼1:
          Integer a=1000;
          Integer b
          =1000;
          System.out.println(a
          ==b);//false
          代碼2:
          Integer a=100;
          Integer b
          =100;
          System.out.println(a
          ==b);//true
          代碼3:
          Integer a=new Integer(100);
          Integer b
          =new Integer(100);
          System.out.println(a
          ==b);//false

          第一段代碼不成立,而第二段代碼成立的原因是:自動打包
          自動打包規(guī)范要求boolean,byte,char≤127,介于-128→127之間的short和int被包裝到固定的對象中.
          打包和拆包是編譯器認(rèn)可的,而不是虛擬機,編譯器在生成類的字節(jié)碼時,插入必要的方法調(diào)用,虛擬機只是執(zhí)行這些字節(jié)碼。

          第三段代碼不用多說肯定不成立.

           

          posted on 2007-12-13 17:03 mashiguang 閱讀(1470) 評論(6)  編輯  收藏 所屬分類: java web開發(fā)

          評論

          # re: java自動打包的差異 2007-12-13 18:18 德德
          貌似打包這詞看著很不舒服

          裝箱比較好聽點吧


            回復(fù)  更多評論
            

          # re: java自動打包的差異[未登錄] 2007-12-14 09:16 paul
          以前沒太注意這個,前短時間看了下 java解惑, java內(nèi)部的事好多都是我們不知道的,也是應(yīng)該應(yīng)該注意的  回復(fù)  更多評論
            

          # re: java自動打包的差異 2007-12-14 10:31 mashiguang
          @德德
          我也覺得裝箱更好聽點.

          但從這本書上看來java好像更希望我們稱之為autowrapping,因為autoboxing源于c#.

          其實叫什么都無所謂啦.  回復(fù)  更多評論
            

          # re: java自動打包的差異 2007-12-14 11:18 隔葉黃鶯
          這跟自動裝箱關(guān)系不大,實質(zhì)上
          Integer d1 = 200 ;
          調(diào)用的是
          Integer d1 = Integer.valueOf(200) ;

          因為緩存中有 -128~127
          所以其中的數(shù)字用
          Integer.valueOf()
          Long.valueOf()
          等會反回同一個對象,也因為 Integer/Long等是不變式的,所以可以這么用

          總之不應(yīng)歸咎到自動裝拆箱的誤,首先要檢討的是你有
          d1==d2
          的形式進(jìn)行比較的意途是什么,顯然去比較它們的引用基本沒什么意思,既然是比較數(shù)值就用
          d1.equals(d2) 或者 d1.intValue()==d2.intValue()
          來比較,也是編程習(xí)慣要注意的問題。  回復(fù)  更多評論
            

          # re: java自動打包的差異[未登錄] 2007-12-17 01:10 eleven
          樓上的說的對~~!  回復(fù)  更多評論
            

          # re: java自動打包的差異[未登錄] 2012-10-19 17:08 王輝
          @隔葉黃鶯
          正解!頂!!!!  回復(fù)  更多評論
            

          主站蜘蛛池模板: 安康市| 景宁| 沾化县| 洞口县| 涿鹿县| 安阳县| 德钦县| 平利县| 辽阳县| 沭阳县| 永安市| 嘉荫县| 南汇区| 台东县| 镇远县| 逊克县| 尼勒克县| 宁强县| 隆回县| 雅江县| 光山县| 朝阳市| 宁安市| 池州市| 玉屏| 连南| 哈巴河县| 湖州市| 土默特左旗| 平湖市| 河源市| 镇康县| 平山县| 高平市| 龙泉市| 日照市| 磐安县| 安达市| 噶尔县| 竹溪县| 介休市|