为啥这两个语句是等价的

Posted

技术标签:

【中文标题】为啥这两个语句是等价的【英文标题】:Why are these two statements equivalent为什么这两个语句是等价的 【发布时间】:2018-01-21 14:42:18 【问题描述】:

所以我的问题基本上与 switch 语句有关。为什么是

switch (foo) 
    case 1: case 2:
        bar();
        break;

同:

if (foo == 1 || foo == 2) 
    bar();

在我看来,使用 switch 语句,案例 1 下的代码将执行,而案例 2 下的代码将被忽略。请向我解释为什么不是这样。

【问题讨论】:

您在这里指的是什么语言?请添加相关标签。 你查过开关是如何工作的吗?在我所知道的每一种语言中,除非用break 分隔,否则每种情况不会单独执行。 case 1“落入”case 2 假设是 Java,去这里搜索“fall through”的页面:docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html 【参考方案1】:

在评估case 语句时,代码将fall through 直到块终止(通常由break 语句终止)。所以第一个sn-p的语义如下:

如果foo2,则执行bar() 然后中断。 如果foo1,则执行case 1:后面的block,它是空的(即什么也不做),然后继续(fall through)到case 2:后面的block,详见上一点 对于任何其他值,什么都不做(因为没有匹配的 case 块。

如您所见,这相当于在foo12 的情况下执行bar()

【讨论】:

【参考方案2】:

break; 语句完全负责跳出 switch 代码块。

没有break; 语句的switch 语句将以非常奇怪的顺序执行。

  switch (2) 
    case 2:
       alert("hello");
    case 3: 
        alert("goodbye");
        break;
    case 4:
         alert("will never show");
  

javascript 切换语句:https://www.w3schools.com/js/js_switch.asp

【讨论】:

【参考方案3】:

在每个 case 语句的末尾添加 break; 以阻止 case 执行它下面的所有内容。否则,它会失败。

【讨论】:

以上是关于为啥这两个语句是等价的的主要内容,如果未能解决你的问题,请参考以下文章

为啥两个函数不记录相同的结果?

这两个case when end的条件语句查询结果为啥不一致

为啥这个语句 rs=st.executeQuery(query);是否在执行?如何仅选择一个表,这取决于两个表中来自 mysql 的输入 type=radio?

为啥这些 C++ STL 无序集不被视为相等?

为啥我的两个 cin 语句没有在程序结束时运行?

为啥添加两个 .OrderBy(或 .OrderByDescending)语句会以相反的顺序应用排序?