Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环和if语句的装箱_Java - Fatal编程技术网

Java 循环和if语句的装箱

Java 循环和if语句的装箱,java,Java,这个代码示例应该打印出来。在应用程序启动后大约一秒钟,文本将永远不会打印出来,但是文本如何表示这永远不会发生 也许是因为我的方块打得不正确,但我不认为这是原因 class ThreadTest { public static boolean b = false; public static void main(String args[]){ new Thread(){ @Override public void run(){

这个代码示例应该打印出来。在应用程序启动后大约一秒钟,文本将永远不会打印出来,但是文本如何表示这永远不会发生

也许是因为我的方块打得不正确,但我不认为这是原因

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");    

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

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

     } 
就像:

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

     }
   }
}
但是

这不像:


没有区别,但第二种情况更为明显

这两种情况是相同的,但如果您有,则情况并非如此,例如:

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

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
}

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

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

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;
            }
由于编译器在编译时自动添加大括号,因此在反编译时它将成为您的第二个代码。

没有{},只有一个语句结束;被视为构造/块的一部分。而且,你也可以试一下。
   if(condition)
   {
     // code
}
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;
            }