zhrb的空間

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

          從語義上分析,return是無論如何也執行不到的,但是編譯器認為for循環內的語句肯定可以執行到,并且里面還有return語句,所以就想當然的認為應該可以執行到return語句,所以沒有報錯。至于到底有沒有錯,想想看、試一下就知道了。呵呵


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

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


          網站導航:
           
          主站蜘蛛池模板: 常山县| 揭东县| 南康市| 玉林市| 卢氏县| 岫岩| 清流县| 枣阳市| 塔城市| 新疆| 鄂州市| 聂荣县| 美姑县| 泾源县| 太和县| 舟山市| 阜新| 开阳县| 阳信县| 讷河市| 楚雄市| 定安县| 兰溪市| 策勒县| 荣成市| 台湾省| 文成县| 久治县| 临泉县| 乡城县| 云林县| 抚松县| 得荣县| 南宫市| 滕州市| 岳阳县| 封丘县| 凌云县| 小金县| 宜宾市| 汕尾市|