zhrb的空間

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 29 評論 :: 0 Trackbacks
          java類庫中java.util.Arrays 類的toString方法的源代碼。如下:
           1   public static String toString(long[] a) {
           2        if (a == null)
           3            return "null";
           4    int iMax = a.length - 1;
           5    if (iMax == -1)
           6            return "[]";
           7
           8        StringBuilder b = new StringBuilder();
           9        b.append('[');
          10        for (int i = 0; ; i++{
          11            b.append(a[i]);
          12        if (i == iMax)
          13        return b.append(']').toString();
          14            b.append("");
          15        }

          16    }
          for循環(huán)有點(diǎn)奇怪,中間的那個表達(dá)式是空的。其實(shí)即使加上了條件,for (int i = 0; i<=iMax ; i++) 和源程序是一個效果的,純粹是多余的,但是多余地加上了這條,結(jié)果編譯出錯了!提示沒有返回語句
          上面的文字摘自下面的文章:
          http://www.aygfsteel.com/raylong1982/archive/2007/11/01/157542.html
          我的理解是:
          如果return語句唯一存在于for循環(huán)里面,for中間語句加入任何判斷條件,除非這個判斷條件絕對為真(如空語句、ture、3>2),否則判斷條件就有可能為假導(dǎo)致無法執(zhí)行到這個循環(huán)中的return語句,編譯器顯然不允許這種情況發(fā)生,所以當(dāng)return語句只在for循環(huán)體內(nèi)出現(xiàn),就不允許for循環(huán)中間的那個語句出現(xiàn)類似i<=iMax這樣的充滿不確定性的判斷,語法上。簡單一句話,包含return的那個句子,至少要讓編譯器覺得,這個return是可以執(zhí)行到的,以減少程序運(yùn)行后出錯的可能。
          不過即使編譯器如此努力,還是架不住人們可能出現(xiàn)的語義上的錯誤,看下面這段代碼: 
          1    public static int max(int a, int b){
          2        for(;;)
          3            if (falsereturn a>b?a:b;
          4    }

          從語義上分析,return是無論如何也執(zhí)行不到的,但是編譯器認(rèn)為for循環(huán)內(nèi)的語句肯定可以執(zhí)行到,并且里面還有return語句,所以就想當(dāng)然的認(rèn)為應(yīng)該可以執(zhí)行到return語句,所以沒有報(bào)錯。至于到底有沒有錯,想想看、試一下就知道了。呵呵


          posted on 2007-11-01 22:05 zhrb 閱讀(836) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 康平县| 肥乡县| 嘉荫县| 莱阳市| 洛川县| 景泰县| 长葛市| 永平县| 绿春县| 江孜县| 洪雅县| 渑池县| 海城市| 千阳县| 襄城县| 平乡县| 遂溪县| 三明市| 金川县| 盘山县| 崇州市| 大庆市| 镇安县| 任丘市| 伊宁市| 安徽省| 乌苏市| 平陆县| 丰县| 石门县| 永登县| 彭阳县| 格尔木市| 灯塔市| 清苑县| 轮台县| 札达县| 绥阳县| 若尔盖县| 大同县| 临夏县|