工作小驛

          Ninja!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks

               前幾次課的講解,我們了解了這樣幾個問題。Java的兩種數(shù)據(jù)類型,和一些程序控制語句。今天,我們還是要通過一些例子。對上述東西有一個更深的理解。

               我們現(xiàn)在知道了,所有對象型的數(shù)據(jù)類型的基類是java.lang.Object 。而寫java程序的時候非常多的工作都是在寫這些類,和實現(xiàn)里面的方法。而偏偏就有那么8種基本類型和他們不一樣。以至于讓你來回在這兩種之間轉(zhuǎn)換,這是很讓人頭疼的事情。Javaint,long,char這樣的類型不是對象型。因此java里提供了一種叫做包裝類(wrapper)的東西,使基本類型,有著相應(yīng)的對象類型Integer,Long,Character等。這樣就可以,先把基本類型的東西,轉(zhuǎn)成對象來用,然后再轉(zhuǎn)回去。來來回回,千錘百煉。

                到了jdk5.0的時候呢,就不用了。看下面的例子: 實踐:

          public class Test1 {

              public static void main(String[] args) {

                  // 裝箱

                  int i = 0;

                  Integer integer = i;//i這么一個基本類型的數(shù),可以賦值給Integer型的變量

                  // 簡單的拆箱

                  int j = integer; //integer這種原始類型的數(shù),也能賦值給j這個原始類型的變量

           

                  Integer counter = 1;        // 裝箱

                  int counter2 = counter;     // 拆箱

           

                  while (counter < 100) {

                    System.out.println("計數(shù) "+counter++); //看啊,counter這個對象型的數(shù),還能自動增加

                  }

              }

          }

                在幕后JVM已經(jīng)自動執(zhí)行了轉(zhuǎn)換,同理Booleanboolean之間也可以,自動拆箱裝箱。但是,Integerint畢竟還是有著不同的。看下面例子:

          public class Test2 {

              public static void main(String[] args) {

                 Integer i1 = 256;

                  Integer i2 = 256;

                  if (i1 = = i2)

                  System.out.println("相等!");

                  else

                  System.out.println("不相等!");

              }

          結(jié)果輸出的是“不相等!”,兩個對象比較,它們在內(nèi)存中開辟的是兩個地址怎么能相等呢?

          警告:你可千萬不能依賴這個結(jié)果,請把i1i2的值,改成100。(請看Test3.java)看看什么結(jié)果,令人驚訝的是改了個數(shù),居然輸出了“相等!”。

             這是因為JVM可以選擇要嘗試這段代碼的最佳優(yōu)化,并對兩個Integer對象使用一個實例,這樣的話“= =”就會返回true了。在自動裝箱時對于值從–128127之間的值,使用一個實例上述例子打包下載  

             這種裝箱與拆箱機制對,程序流程控制語句,也有很大影響:

          public class Test4 {

              public static void main(String[] args) {

                  Boolean arriving = true;

                  Integer peopleInRoom = 0;

                  int maxCapacity = 100;

           

                  while (peopleInRoom < maxCapacity) {

                    if (arriving) {

                      System.out.printf("很高興見到你.%d號先生\n",peopleInRoom);

                      peopleInRoom++;}

                    else {

                      peopleInRoom--;

                    }

                }}}另外一個從unboxing獲得好處的語句是switch。在jdk5.0之前的JVMswitch接受intshortcharacter或者byte值,而在unboxing的操作中,你現(xiàn)在也可以為它賦予新引入的enum之外的Integer,Short,Char以及Byte值。Enum的值,我們在后面的教程會詳細講述。上述例子打包下載 

          posted on 2007-07-22 17:17 王君 閱讀(213) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 噶尔县| 东方市| 新平| 天祝| 咸丰县| 岱山县| 沈丘县| 贵南县| 呼和浩特市| 鄂尔多斯市| 奇台县| 青岛市| 吉首市| 光泽县| 广元市| 云龙县| 宜宾市| 永兴县| 茌平县| 乌兰察布市| 图们市| 古蔺县| 金寨县| 阜平县| 东丽区| 乌兰县| 宾阳县| 太湖县| 大连市| 大理市| 中西区| 华亭县| 清水县| 榆社县| 绍兴市| 镇雄县| 姚安县| 彭山县| 石门县| 长宁县| 石泉县|