论坛首页 Java企业应用论坛

一段趣味的代码关于 while循环的

浏览 14214 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2011-06-16  
do while的地方都可以用while代替
0 请登录后投票
   发表时间:2011-06-16  
qljcly 写道
养成好的代码习惯,不写do while,自然不会出现这种情况。

do while本身没有错,do while可以改为任何形式的循环结构,不限于for,while等,但是改出来的代码结构没有do while适用时的好(第一次区别于其他次数的循环时)。
0 请登录后投票
   发表时间:2011-06-16  
怎么可能是死循环。。。 明明是执行一次就退出了
0 请登录后投票
   发表时间:2011-06-16  
redhat 写道
排查问题时发现了一段粗心的代码:

private static boolean test(){
    int i=10;
    {
        i--;
    }while(i>0);
    return true;
}


大家认真读完能给出正确结果吗?

eclipse里面format一下就出来老:)
private static boolean test() {
        int i = 10;
        {
            i--;
        }
        while (i > 0)
            ;
        return true;
    }
0 请登录后投票
   发表时间:2011-06-16  
所以while后面要加上{},在Eclipse中Format一下就ok了(自动添加{})
0 请登录后投票
   发表时间:2011-06-16  
是死循环。。。
一直执行:
while (i > 0) ;
0 请登录后投票
   发表时间:2011-06-16  

惭愧。。
看了半天也没看出问题,于是实际运行了一下代码这才发现了问题所在。

  如果把代码改成下面这样就能看到什么地方有问题了。

private static boolean test(){   
		    int i=10;   
//		    {   
//		        i--;   
//		    }
		    
		    while(i>0);   
		    return true;   
		} 

 

 

原来在while前没有do关键字时,while前面的{}是作为一个代码块单独执行的,而后面的while(i>0);形成了一个单独的语句,这也就是前面各位说的是循环的代码了。

 

 

0 请登录后投票
   发表时间:2011-06-17  
不执行i,直接返回true,因为这只是对局部变量计算,而且没有任何外部引用,返回也没有对任何变量引用,"聪明的"虚拟机可以自动优化这个地方.
0 请登录后投票
   发表时间:2011-06-17  
yeah_nihao 写道
不执行i,直接返回true,因为这只是对局部变量计算,而且没有任何外部引用,返回也没有对任何变量引用,"聪明的"虚拟机可以自动优化这个地方.

执行一把,起码。
0 请登录后投票
   发表时间:2011-06-17  
sgq0085 写道
怎么可能是死循环。。。 明明是执行一次就退出了

执行一把,起码。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics