这不会突破if语句吗?

时间:2012-05-28 12:08:44

标签: java if-statement case break

所以基本上给出了以下代码。

action = 2;mode = 1i设置为2时?

我正在研究同事代码,它是这样编写的,但我认为中断只会跳过if并继续case 2的其余部分。所以基本上if语句是没有意义的。

switch(action){

   case 1: i = 1; break;

   case 2: if(mode == 1)
           {
              break;
           }

           i = 2;
           break;

   case 3: i = 3; break;

我把它重写为:

 case 2: if(mode != 1)
            i = 2;
         break;

但它不是唯一的地方,有些更复杂。如果我要重构它,我需要一些我正确的信息。

4 个答案:

答案 0 :(得分:7)

没有“if循环”这样的东西。 Break永远不会引用“if”语句。

请参阅Wasserman's answer以获取指向语言规范的指针。

此外,假设1< = action< = 3,您的代码简化为:

if(! (action == 2 && mode == 1)) {
     i = action;
}

答案 1 :(得分:1)

JLS section 14.15

  

break语句将控制转移到封闭语句之外。

     

BreakStatement:

   break Identifieropt ;
     

没有标签的break语句尝试将控件转移到最里面的 switchwhiledofor语句(重点补充)直接封闭的方法或初始化程序块;这个语句叫做中断目标,然后立即正常完成。

答案 2 :(得分:1)

如果那是您想要了解的,那么您的重构是正确的。

答案 3 :(得分:1)

如果action == 2mode == 1i = 2将不会被执行(为什么你不测试它?它会比在这里要求更快)。

但是你的改进无论如何更清洁,我会用它。