33

有人可以向我解释一下吗?

4

7 回答 7

37

它们非常相似,但每个都有一些特殊功能。

转变

  • switch通常比许多嵌套更紧凑if else,因此更具可读性
  • 如果你省略了break两个 switch case 之间的情况,你可以在许多类似 C 的语言中陷入下一个 case。if else你需要一个(这对goto你的读者来说不是很好......如果语言完全支持goto的话)。
  • 在大多数语言中,switch只接受原始类型作为键和常量作为案例。这意味着编译器可以使用非常快的跳转表对其进行优化。
  • 目前还不清楚如何switch正确格式化。从语义上讲,这些案例是goto应该向左对齐的跳转目标(如 的标签)。当你有花括号时,情况会变得更糟:

    case XXX: {
    } break;
    

    或者大括号应该进入自己的行?右大括号应该放在后面break吗?那会有多难读?等等

  • 在许多语言中,switch只接受某些数据类型。

如果别的

  • if允许条件中的复杂表达式,而 switch 需要一个常量
  • 您不会不小心忘记breakbetween ifs 但您可以忘记 the else(尤其是在 cut'n'paste 期间)
  • 它接受所有数据类型。
于 2009-03-25T08:21:26.987 回答
7

主要区别在于立即switch发送给相关人员,通常通过索引跳转,而不是必须评估链中所需的所有条件,这意味着到达链末端的代码比到达链末端的代码更慢开始。caseif-else

这反过来又对链没有的switch语句施加了一些限制:它不能处理所有数据类型,并且所有值都必须是常量。if-elsecase

于 2016-05-12T10:12:42.163 回答
4

IF else - IT 用于做出决定

Switch 语句 - 用于根据案例值列表测试给定变量的值。

于 2015-03-20T16:28:16.960 回答
2

if-else 和 switch 的区别

  1. if 语句内的表达式决定是执行 if 块内的语句还是 else 块下的语句。另一方面,switch 语句中的表达式决定执行哪种情况。

  2. if-esle 语句检查是否相等以及逻辑表达式。另一方面, switch 只检查是否相等。

  3. if 语句计算整数、字符、指针或浮点类型或布尔类型。另一方面,switch 语句只计算字符或整数数据类型。

  4. 执行顺序就像 if 块下的语句将执行或 else 块语句下的语句将执行。另一方面,switch 语句中的表达式决定执行哪个 case,如果您不在每个 case 之后应用 break 语句,它将执行到 switch 语句结束。

  5. 如果 if 中的表达式结果为 false,则将执行 else 块中的语句。如果 switch 语句中的表达式结果为假,则执行默认语句。

  6. 很难编辑 if-else 语句,因为跟踪需要更正的位置很繁琐。另一方面,很容易编辑 switch 语句,因为它们很容易跟踪。

总之,我们可以说 switch 的行为比 if else 语句快一点!!!

于 2017-09-13T16:23:18.210 回答
1

Switch 和 if-else 语句的区别如下:

这是 if-else 阶梯的一般语法:

if (condition1) { //Body of if }
    else if (condition2) { //Body of if }
    else if (condition3) { //Body of if }
else { //default if all conditions return false }

这是 switch 的一般语法:

switch ( variable )
{
 case <variable value1>: //Do Something
                                             break;
 case <variable value2>://Do Something
                                             break;
 default: //Do Something
                break;
}

if-else 阶梯属于严格条件检查类型,而 switch 属于跳转值捕获类型。

切换 if-else 阶梯的优点:

  • switch 语句的运行速度比等效的 if-else 阶梯要快得多。这是因为编译器在编译过程中为一个开关生成了一个跳转表。因此,在执行过程中,它不会检查满足哪种情况,而只是决定必须执行哪种情况。
  • 与 if-else 语句相比,它更具可读性。
于 2017-01-05T12:02:45.463 回答
0

明显的区别:

  • if...else语句检查括号中的条件true是否计算为或false
  • 该语句检查括号中的与关键字的switch是否相等。casetrue

例子

var a  = 'hello'

示例 - 如果...否则

if(a == 'hello') {
  print('right!')
} else if (a == 'hi')
  print('left!')
} else {
  print('wrong!')
}

示例 - 开关

switch(a) {
  case 'hello': // a == 'hello'
    print('right!')
    break // You should add this
  case 'hi': // a == 'hi'
    print('left!')
    break
  default: // this executes if no equality was met in the values above.
    print('wrong!')
}

// If you are not sure of either of the parenthesis value or the
// case value or you want to make more complex conditioning, you can use `true`:

var age = 18:
switch(true) {
  case age < "18": // 18 < 18 == false
    print("under age!");
    break;
  case age == 18: // 18 == 18 == true
    print("right age!");
    break;
  default:
    print("18+!");
}
于 2021-06-02T17:10:36.470 回答
-3

我认为主要区别在于,在 if-else 块中我们可以测试条件。但在 switch 中并不完全相同

于 2009-09-01T10:46:31.750 回答