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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 马尔康县| 那坡县| 曲阜市| 昭苏县| 安新县| 高台县| 平顺县| 巴里| 土默特左旗| 乌审旗| 红桥区| 南开区| 浮梁县| 潮安县| 扶绥县| 丽水市| 金溪县| 保德县| 乌拉特中旗| 凤翔县| 呈贡县| 双峰县| 静安区| 临潭县| 双桥区| 嫩江县| 南丹县| 瓦房店市| 佳木斯市| 台东市| 垫江县| 漳平市| 古浪县| 于都县| 祁东县| 习水县| 新龙县| 吐鲁番市| 承德市| 丰台区| 鸡西市|