当前位置: 首页 > 面试题库 >

中断并切换似乎执行所有case语句

微生宝
2023-03-14
问题内容

在最新的Java和Eclipse稳定发行版(Kempler)中,假设存在程序包和类名称,请输入以下代码并执行该代码:

package some_package;

public class what_the_heck {

    public static void main(String[] args) {
        int p = 2;
        int x = 1;
        switch(p){  
            case (1):
                x--;
            case (2):
                x = 2;
            case (3):
                x = 3;
            default:
                x++;
        }
        System.out.println(x);
    }
}

这将打印值4。最初,我认为应该打印2,因为我认为即使没有break语句,每段代码仍保留在case语句中。现在,我认为问题在于如何编译。例如,我目前的信念是在内部使用布尔值来跟踪case语句是否等于该值。如果是,则布尔值为true,并且
所有case语句将被视为true, 直到找到中断为止。这是有道理的,但是我仍然想知道这背后是否还有其他原因,或者我的假设是否完全错误。


问题答案:

开关之所以起作用的原因是:

switch(p){  
        case (1):
            x--;
        case (2):
            x = 2;
        case (3):
            x = 3;
        default:
            x++;
    }

实际上(实际上)只是语法糖:

if (p == 1)
    goto .L1;
else if (p == 2)
    goto .L2;
else if (p == 3)
    goto .L3;
else
    goto .L4;

.L1:
    x--;
.L2:
    x = 2;
.L3:
    x = 3;
.L4:
    x++;

Java没有goto语句,但是C有,这就是它的来历。因此,如果p为2,它将跳转到.L2标签并执行该语句之后的所有语句。



 类似资料:
  • 问题内容: 有人可以解释一下为什么我的循环从0变为7吗?我只需要获得前3种情况,但是程序将遍历所有代码。代码位于show()方法中。 问题答案: 因为没有休息。在每种情况下,您都需要break关键字。有关详细说明,请参见switch语句Java教程。 例如 否则,如果上述情况之一被评估为true,则将执行其他情况。

  • 我有一个函数,有一些if…else像这样: 但是我需要添加更多的语句,所以我认为使用switch…case更好,所以我尝试这样做: 但没有奏效。我错过了什么?

  • 因此,这是我第一次使用JBehave,我试图在项目中创建第一个JBehave,但目前似乎测试没有执行这些步骤。最后,测试表明所有测试用例都通过了,没有任何问题,但实际上它们根本没有被执行。我在每个步骤方法中都设置了断点,而且我的调试器根本不会阻止我,更不用说这些步骤当前抛出的异常了。 和测试执行器: 你知道有什么问题吗?

  • 请考虑以下代码: 任务是应该并行执行的运行表的列表。当我们启动这个线程,并且它开始执行时,根据一些计算,我们需要中断(取消)所有这些任务。 中断线程只会停止执行中的一个。我们怎么对付别人?或者流不应该这样使用?或者你知道更好的解决办法?

  • 本文向大家介绍Swift中的条件切换语句switch...case学习教程,包括了Swift中的条件切换语句switch...case学习教程的使用技巧和注意事项,需要的朋友参考一下 语法 Swift 语言中 switch 语句的语法: 注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,

  • 问题内容: 这实际上可能是一个愚蠢的问题,但我想知道是否有可能使用if语句执行所有条件。我解释: 当所有三个方法都返回true时执行。关键是,当一个方法返回false时,其余方法将不会执行。这通常对性能而言是一件好事,但是如果我真的需要独立于所有方法返回的值来执行所有方法,然后对表达式求值并进入if与否,该怎么办?同样适用于OR或其他 有没有一种方法可以告诉Java采取这种方式?我目前的解决方法是