这个代码示例应该在应用程序启动后大约一秒打印出“永远不会被打印”的文本,但是文本说这种情况从未发生过。
也许是因为我的积木可能不正确的拳击,但我认为这不是原因。
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");
答案 0 :(得分:1)
在这种情况下,他们是平等的。但是为了便于阅读,后者更可取。
if(a)
while(b)
if(c) {
}
就像:
if(a) {
while(b) {
if(c) {
}
}
}
<强> BUT 强>
if(a)
blabla;
while(b)
if(c) {
}
不喜欢:
if(a) {
blabla;
while(b)
if(c) {
}
}
答案 1 :(得分:1)
没有区别,但第二个更清楚
答案 2 :(得分: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;
}
由于编译器会在编译时自动添加大括号,因此它将成为第二个代码的反编译。
答案 3 :(得分: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
}