hyperjava  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 0
          • 文章 - 2
          • 評論 - 2
          • 引用 - 0

          導航

          留言簿

          文章檔案

          搜索

          •  

          最新評論

           
          當一個java算術表達式中包含多個基本類型的值時,整個算術表達式的數據類型將發生自動提升。Java定義如下的自動提升規則:
          1. 所有byte型、short型和char型將被提升到int型。
          2. 整個算術表達式的數據類型自動提升到與表達式中最高等級操作數同樣的類型。操作數的等級排列如下圖所示,位于箭頭右邊類型的等級高于位于箭頭左邊類型的等級。


          下面程序示范了一個典型的錯誤:
          //定義一個short類型變量
          short sValue = 5;
          //表達式中的sValue將自動提升到int類型,則右邊的表達式類型為int
          //將一個int類型賦給short類型的變量將發生錯誤。
          sValue = sValue - 2;
                上面中的sValue -2表達式的類型將被提升到int類型,這樣就是把右邊的int型值賦給左邊的short型變量,從而引起錯誤。

          下面代碼是表達式類型自動提升的正確示例代碼(程序清單同上):

          byte b = 40;
          char c = 'a';
          int i = 23;
          double d = .314;
          //右邊表達式中在最高等級操作數為d(double型)
          //則右邊表達式的類型為double型,故賦給一個double型變量
          double result = b + c + i * d;
          //將輸出144.222
          System.out.println(result);

          必須指出的,表達式的類型將嚴格保持和表達式中最高等級操作數相同的類型,下面代碼中兩個int整數進行除法運算,即使無法除盡,也將得到一個int結果(程序清單同上):
          int val = 3;
          //右邊表達式中2個操作數都是int,故右邊表達式的類型為int
          //因此,雖然23/3不能除盡,依然得到一個int整數
          int intResult = 23 / val;
          //將輸出7
          System.out.println(intResult);
          從上面程序中可以看出,當兩個整數進行除法運算時,如果不能整數,得到結果將是把小數部分截斷取整后的整數。

          如果表達式中包含了字符串,則又是另一番情形了:因為把加號(+)放在字符串和基本類型值之間時,這個加號是一個字符串連接運算符,而不是進行加法運算。看如下代碼:
          //輸出字符串Hello!a7
          System.out.println("Hello!" + 'a' + 7);
          //輸出字符串104Hello!
          System.out.println('a' + 7 + "Hello!");
          對于第一個表達式"Hello!" + 'a' + 7,先進行"Hello!" + 'a'的運算,將把'a'轉換成字符串,將拼接成字符串Hello!a,接著進行"Hello!a" + 7的運算,這也是一個字符串連接運算,得到結果是Hello!a7。對于第二個表達式,先進行'a' + 7加法運算,其中'a'自動提升到int型,變成a對應的ASCII值:97,從97 + 7將得到104,然后進行104 + "Hello!",104會自動轉換成字符串,將變成兩個字符串的連接運算,從而得到104Hello!。
          posted on 2008-11-21 13:04 hyperjava 閱讀(3600) 評論(2)  編輯  收藏
          評論:
          • # re: java表達式類型的自動提升  nexstone Posted @ 2008-11-25 17:07
            樓主這篇文章有些眼熟啊,是不是參考李剛的《瘋狂java講義》的啊?  回復  更多評論   

          • # re: java表達式類型的自動提升  hyperjava Posted @ 2008-11-28 17:47
            回樓上的,是啊  回復  更多評論   


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


          網站導航:
           
           
          Copyright © hyperjava Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 新乡市| 县级市| 厦门市| 离岛区| 观塘区| 萨嘎县| 铜鼓县| 罗平县| 临颍县| 定日县| 柳河县| 湘阴县| 永平县| 巴马| 九台市| 四平市| 文安县| 开封市| 林芝县| 平果县| 福贡县| 应城市| 桃江县| 政和县| 尼勒克县| 菏泽市| 阜宁县| 类乌齐县| 嵊泗县| 房山区| 荆门市| 化德县| 万州区| 朔州市| 随州市| 西畴县| 苗栗市| 双峰县| 西充县| 石阡县| 阿坝|