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.blogjava.net/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 阅读(825) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: