-4

此代码示例应在应用程序启动大约一秒后打印出文本“将永远不会被打印”,但文本所说的这种情况永远不会发生。

也许是因为我的积木可能不正确的装箱,但我认为这不是原因。

class ThreadTest
{
    public static boolean b = false;

    public static void main(String args[]){

        new Thread(){
            @Override public void run(){
                try{
                    Thread.sleep(1000);
                }
                catch(Exception e){}

                b = true;
            }
        }.start();


        while(true)
            if(b)
            {
                System.out.println("will never be printed");
                break;
            }
}

}

请说这是否真的很疯狂,或者我只是犯了一个大错。

看起来没有人读过这个问题。问题是“将永远不会被打印”的行应该在一秒钟后打印,但事实并非如此。你们都只是在写与这个问题毫无关系的东西。再说一遍:为什么这条线没有被执行?!!!!:

System.out.println("will never be printed");    
4

4 回答 4

1

没有区别,但第二个更清楚

于 2013-08-29T14:21:49.657 回答
1

在这种情况下,它们是相等的。但后者更适合可读性。

if(a)
   while(b)
     if(c) {

     } 

就好像:

if(a) {
    while(b) {
      if(c) {

     }
   }
}

if(a)
   blabla;
   while(b)
     if(c) {

     } 

不像:_

if(a) {
   blabla;
   while(b)
     if(c) {

     } 
}
于 2013-08-29T14:20:45.220 回答
1

在这种情况下它们都是相等的,但我们更喜欢使用大括号,即使条件语句只有一条语句,以避免一些调试问题,这些问题可能会因非常小的错误而发生。

通过这种方式,您的第一个代码等于第二个代码。

top:
while(true)  // Had only one if statement
    if(...)  // Had only one while statement
        while(...)  // Had only one if statement
            if(...)  // It can have more code since it uses braces
            {
                //code
                break top;
            }

而且由于编译器会在编译时自动添加大括号,因此它会在反编译时成为您的第二个代码。

于 2013-08-29T14:26:16.703 回答
0

这两种情况是相同的,但如果你有,情况就不是这样,例如:

top:
while(true)
    if(...)
        while(...)
            if(...)
            {
                //code
                break top;
            }
        //more code

top:
while(true)
{
    if(...)
    {
        while(...)
        {
            if(...)
            {
                //code
                break top;
            }
        }

        // more code
    }
}

当然如大家所说,第二个也比较清楚。我建议始终在自己的一行中使用“{”和“}”,与打开它们的语句在同一列中

例如:

像那样

if(condition)
{
   //code
}

不是

if(condition){
  code
}

而且绝对不是

   if(condition)
   {
     // code
}
于 2013-08-29T14:22:19.493 回答