show-sales.com

          awed

           

          自動(dòng)裝箱與拆箱的誤用

          在JAVA JDK1.5以后具有的自動(dòng)裝箱與拆箱的功能,所謂的自動(dòng)裝箱
          與拆箱也就是把基本的數(shù)據(jù)類型自動(dòng)的轉(zhuǎn)為封裝類型。
          如:自動(dòng)裝箱,它可以直接把基本類型賦值給封裝類型
          Integer num = 10 ;
          Double d = 2d ;
             
           自動(dòng)拆箱,它可以把封裝類型賦值給基本類型
          int num = new Integer(10);
          double d = new Double(2d);

          知道了自動(dòng)裝箱與拆箱后我們現(xiàn)看一下下面這兩個(gè)程序代碼:

          AutoBoxDemo1.java
          -------------------------------------------------------
          public class AutoBoxDemo1 
          {
              
          public static void main(String[] args) 
              
          {        
                  Integer d1 
          = 100 ;
                  Integer d2 
          = 100 ;

                  
          if(d1==d2)
                      System.out.println(
          "d1==d2");
                  
          else
                      System.out.println(
          "d1!=d2");
              }

          }



          AutoBoxDemo2.java
          --------------------------------------------------------
          public class AutoBoxDemo2 
          {
              
          public static void main(String[] args) 
              
          {        
                  Integer d1 
          = 200 ;
                  Integer d2 
          = 200 ;

                  
          if(d1==d2)
                      System.out.println(
          "d1==d2");
                  
          else
                      System.out.println(
          "d1!=d2");
              }

          }

          大家看看這兩個(gè)程序代碼的結(jié)果是怎么樣的呢?
          其實(shí)在AutoBoxDemo1.java中結(jié)果是:d1==d2
          在AutoBoxDemo2.java中結(jié)果是:d1!=d2

          為什么結(jié)果會(huì)是這樣的?我們來(lái)看了解一下!

          其實(shí)剛剛這兩個(gè)程序結(jié)果的不同是與==運(yùn)算符比較有關(guān),==是用來(lái)比較
          兩個(gè)基本數(shù)據(jù)類型的變量是否相等的,而事實(shí)上==也用于判斷兩個(gè)對(duì)象
          變量名是否參考同一對(duì)象。在自動(dòng)裝箱時(shí)對(duì)于值從-128到127之間的值
          它們被裝箱為Integer對(duì)象后會(huì)在內(nèi)存中重用,所以在AutoBoxDemo1.java
          中是相等的,而超過(guò)了從-128到127之前的值時(shí),被裝箱后的Integer對(duì)象
          并不會(huì)被重用。所以AutoBoxDemo2.java中是不相等的。

          posted on 2007-12-12 09:58 一鳴 閱讀(1814) 評(píng)論(2)  編輯  收藏 所屬分類: J2SE

          評(píng)論

          # re: 自動(dòng)裝箱與拆箱的誤用 2007-12-12 13:08 隔葉黃鶯

          這跟自動(dòng)裝箱關(guān)系不大,實(shí)質(zhì)上
          Integer d1 = 200 ;
          調(diào)用的是
          Integer d1 = Integer.valueOf(200) ;

          因?yàn)榫彺嬷杏?-128~127
          所以其中的數(shù)字用
          Integer.valueOf()
          Long.valueOf()
          等會(huì)反回同一個(gè)對(duì)象,也因?yàn)?Integer/Long等是不變式的,所以可以這么用

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

          # re: 自動(dòng)裝箱與拆箱的誤用 2008-04-17 10:36 一鳴

          @隔葉黃鶯
          謝謝您的指正,很久沒(méi)有寫記錄的習(xí)慣了,在此謝謝你的指正,我也一定更加努力。  回復(fù)  更多評(píng)論   


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告


          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 崇信县| 通榆县| 徐水县| 桂东县| 高青县| 禄劝| 兴城市| 阿坝县| 台北县| 二连浩特市| 伊宁县| 呼图壁县| 宜春市| 南平市| 阜南县| 宁津县| 常山县| 凉城县| 临潭县| 福泉市| 宁阳县| 湘潭县| 黑河市| 股票| 白玉县| 郑州市| 彰化市| 滕州市| 麦盖提县| 泗水县| 富源县| 桦川县| 襄城县| 巩留县| 二连浩特市| 吴堡县| 岢岚县| 山阴县| 开平市| 哈巴河县| 都安|