show-sales.com

          awed

           

          自動裝箱與拆箱的誤用

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

          知道了自動裝箱與拆箱后我們現看一下下面這兩個程序代碼:

          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");
              }

          }

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

          為什么結果會是這樣的?我們來看了解一下!

          其實剛剛這兩個程序結果的不同是與==運算符比較有關,==是用來比較
          兩個基本數據類型的變量是否相等的,而事實上==也用于判斷兩個對象
          變量名是否參考同一對象。在自動裝箱時對于值從-128到127之間的值
          它們被裝箱為Integer對象后會在內存中重用,所以在AutoBoxDemo1.java
          中是相等的,而超過了從-128到127之前的值時,被裝箱后的Integer對象
          并不會被重用。所以AutoBoxDemo2.java中是不相等的。

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

          評論

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

          這跟自動裝箱關系不大,實質上
          Integer d1 = 200 ;
          調用的是
          Integer d1 = Integer.valueOf(200) ;

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

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

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

          @隔葉黃鶯
          謝謝您的指正,很久沒有寫記錄的習慣了,在此謝謝你的指正,我也一定更加努力。  回復  更多評論   


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


          網站導航:
           

          導航

          統計

          公告


          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 泗阳县| 盖州市| 海伦市| 集贤县| 凉山| 西畴县| 丁青县| 桐乡市| 南乐县| 那曲县| 攀枝花市| 墨竹工卡县| 新晃| 泽普县| 彝良县| 丹江口市| 辉县市| 兖州市| 正蓝旗| 改则县| 蒙城县| 南投市| 连江县| 遂川县| 房产| 宜都市| 巴楚县| 榆树市| 六枝特区| 柘荣县| 潮州市| 雷山县| 鸡西市| 浙江省| 乳山市| 萍乡市| 凌源市| 临西县| 永济市| 乐亭县| 清河县|