为啥这两个语句是等价的
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的语义如下:
foo
是2
,则执行bar()
然后中断。
如果foo
是1
,则执行case 1:
后面的block,它是空的(即什么也不做),然后继续(fall through)到case 2:
后面的block,详见上一点
对于任何其他值,什么都不做(因为没有匹配的 case
块。
如您所见,这相当于在foo
是1
或2
的情况下执行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?