隨筆-126  評論-247  文章-5  trackbacks-0


          前言:
          java 5.0 開始對基本數據類型提供了 自動裝箱 (autoboxing) 和 自動拆箱 (autounboxing) 的功能,
          使得基本數據類型與其對象之間的轉換變得極其方便。

          即便你不知道 什么是 自動裝箱與拆箱,但相信你平常時候一直都在接觸,只是在你還沒有觸及這樣一個概念之前,一直沒有發覺而已。
          但是你需要知道在 java 中什么是自動裝箱與拆箱,還需要知道 int 和 short 的裝箱,因為這兩個的裝箱規則與 float 或 double 以及
          其他的基本數據類型不完全一樣。

          自動裝箱

          1
          2        /**
          3         * 實際上,程序運行時,系統為我們執行了下面一條語句:
          4         * Integer number = new Integer(290);
          5         */

          6        Integer number = 290;
          7        System.out.println(number);
          8


          自動拆箱

           1
           2        Integer number = 290;
           3        // Other code
           4      /**
           5         * 實際上,程序運行時,系統為我們執行了下面一條語句:
           6         * int number2 = number.intValue();
           7         */

           8        int number2 = number;
           9        System.out.println(number2);
          10


          就上面示例代碼塊而言,實際上自動裝箱就是系統自動幫我們去 new 了 Integer 對象,大家都知道,每個對象都會有一個 hashCode() 方法,
          這個方法是繼承 Object 而來,Object 類是所有類的超類。當需要比較兩個對象是否相等時,可以用 " == " 和 equals 來做比較。
          于對象而言, " == " 比較的是哈希碼的值,也就是比較 hashCode() 方法的返回值,這個值是唯一的,在底層它是用來確定對象在堆內存上的存儲位置。
          " == " 也可以用來做基本數據類型的比較。equals 方法大家都知道,它是用來比較兩個對象的內容是否一樣。
          上面說到自動裝箱其實就是系統自動幫我們去 new 了 Integer 對象,但是神奇的事情發生了:
          當 int 的取值在  -128 ~ 127 之間的時候,這時候系統并不會每次都幫我們去 new 一個 Integer 對象,而是取值相同的對象只會被 new 一次,
          取值相同的 Integer 對象系統不會再去 new 一次,而是共享了已有的這個 Integer 對象。
          而當 int 的取值在  -128 ~ 127 之外的時候,這時候不管 Integer 對象的取值是否一樣,系統都會去 new 一個。


          示例代碼:

           1
           2        // -128~127 之內的數
           3        Integer number1 = 40;
           4        Integer number2 = 40;
           5        System.out.println("number1 == number2 :  --->> " + (number1 == number2));    // output : true
           6        
           7        // -128~127 之外的數
           8        Integer number3 = 128;
           9        Integer number4 = 128;
          10       System.out.println("number3 == number4 :  --->> " + (number3 == number4));    // output : false
          11       System.out.println("number3 equals number4 :  --->> " + (number3.equals(number4)));    // output : true
          12


          示例代碼輸出結果:

          1
          2number1 == number2 :  --->> true
          3number3 == number4 :  --->> false
          4number3 equals number4 :  --->> true
          5


          short 與 int 的裝箱規則是一樣,就不多說了,但不要認為所有的基本數據類型都有這樣一個規則,比如 float 和 double 都沒有這樣的規則,
          float 和 double 每次裝箱的時候都是會包裝成一個對象的。












            
          posted on 2012-07-08 07:36 fancydeepin 閱讀(1758) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 宁德市| 思南县| 云和县| 榆林市| 淮滨县| 福建省| 漠河县| 新河县| 华容县| 印江| 新昌县| 白河县| 台东市| 繁峙县| 祁门县| 长乐市| 湘潭市| 新密市| 武夷山市| 广水市| 龙岩市| 汾西县| 昌黎县| 文山县| 吉安市| 额敏县| 娱乐| 潮州市| 抚顺市| 泾阳县| 海宁市| 西昌市| 镇江市| 增城市| 循化| 招远市| 望都县| 翼城县| 长汀县| 滨州市| 湘阴县|