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;
}