hyperjava  
          日歷
          <2008年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456
          統(tǒng)計(jì)
          • 隨筆 - 0
          • 文章 - 2
          • 評(píng)論 - 2
          • 引用 - 0

          導(dǎo)航

          留言簿

          文章檔案

          搜索

          •  

          最新評(píng)論

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


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

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

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

          必須指出的,表達(dá)式的類型將嚴(yán)格保持和表達(dá)式中最高等級(jí)操作數(shù)相同的類型,下面代碼中兩個(gè)int整數(shù)進(jìn)行除法運(yùn)算,即使無(wú)法除盡,也將得到一個(gè)int結(jié)果(程序清單同上):
          int val = 3;
          //右邊表達(dá)式中2個(gè)操作數(shù)都是int,故右邊表達(dá)式的類型為int
          //因此,雖然23/3不能除盡,依然得到一個(gè)int整數(shù)
          int intResult = 23 / val;
          //將輸出7
          System.out.println(intResult);
          從上面程序中可以看出,當(dāng)兩個(gè)整數(shù)進(jìn)行除法運(yùn)算時(shí),如果不能整數(shù),得到結(jié)果將是把小數(shù)部分截?cái)嗳≌蟮恼麛?shù)。

          如果表達(dá)式中包含了字符串,則又是另一番情形了:因?yàn)榘鸭犹?hào)(+)放在字符串和基本類型值之間時(shí),這個(gè)加號(hào)是一個(gè)字符串連接運(yùn)算符,而不是進(jìn)行加法運(yùn)算。看如下代碼:
          //輸出字符串Hello!a7
          System.out.println("Hello!" + 'a' + 7);
          //輸出字符串104Hello!
          System.out.println('a' + 7 + "Hello!");
          對(duì)于第一個(gè)表達(dá)式"Hello!" + 'a' + 7,先進(jìn)行"Hello!" + 'a'的運(yùn)算,將把'a'轉(zhuǎn)換成字符串,將拼接成字符串Hello!a,接著進(jìn)行"Hello!a" + 7的運(yùn)算,這也是一個(gè)字符串連接運(yùn)算,得到結(jié)果是Hello!a7。對(duì)于第二個(gè)表達(dá)式,先進(jìn)行'a' + 7加法運(yùn)算,其中'a'自動(dòng)提升到int型,變成a對(duì)應(yīng)的ASCII值:97,從97 + 7將得到104,然后進(jìn)行104 + "Hello!",104會(huì)自動(dòng)轉(zhuǎn)換成字符串,將變成兩個(gè)字符串的連接運(yùn)算,從而得到104Hello!。
          posted on 2008-11-21 13:04 hyperjava 閱讀(3603) 評(píng)論(2)  編輯  收藏
          評(píng)論:

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © hyperjava Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 安新县| 卢湾区| 尼木县| 临沂市| 神池县| 克拉玛依市| 安陆市| 中阳县| 铜梁县| 工布江达县| 外汇| 南乐县| 通许县| 望谟县| 潞城市| 无极县| 台安县| 仙居县| 莱西市| 台州市| 石家庄市| 依兰县| 德州市| 潜江市| 固镇县| 满洲里市| 本溪| 麻城市| 新宾| 平和县| 高陵县| 武义县| 大理市| 常州市| 乡城县| 洛隆县| 榆社县| 南皮县| 沂水县| 岱山县| 青阳县|