工作小驛

          Ninja!

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

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

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

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

          public class Test1 {

              public static void main(String[] args) {

                  // 裝箱

                  int i = 0;

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

                  // 簡單的拆箱

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

           

                  Integer counter = 1;        // 裝箱

                  int counter2 = counter;     // 拆箱

           

                  while (counter < 100) {

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

                  }

              }

          }

                在幕后JVM已經自動執行了轉換,同理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("不相等!");

              }

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

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

             這是因為JVM可以選擇要嘗試這段代碼的最佳優化,并對兩個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的操作中,你現在也可以為它賦予新引入的enum之外的Integer,Short,Char以及Byte值。Enum的值,我們在后面的教程會詳細講述。上述例子打包下載 

          posted on 2007-07-22 17:17 王君 閱讀(212) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 长寿区| 乌鲁木齐县| 浠水县| 大田县| 额尔古纳市| 巫溪县| 黄平县| 西安市| 西乌| 朝阳市| 丰顺县| 永丰县| 蒙阴县| 敖汉旗| 司法| 丰宁| 临武县| 南靖县| 额济纳旗| 通海县| 嘉定区| 大足县| 包头市| 柳州市| 河北区| 郎溪县| 延安市| 娄烦县| 黑河市| 资源县| 城固县| 锡林郭勒盟| 新蔡县| 宜丰县| 邵阳市| 济南市| 安丘市| 锡林郭勒盟| 漳平市| 休宁县| 民和|