1.多项选择运算符:switch

Java 有另一个有趣的运算符,它继承自它的祖父 (C++)。我们正在谈论switch声明。我们也可以称其为多项选择运算符。看起来有点麻烦:

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

括号内指示表达式或变量。如果表达式的值为value1,则 Java 机器开始执行code1。如果表达式等于value2,则执行跳转到code2。如果表达式等于value3,则code3执行。

例子:

代码 控制台输出
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
High

2.break声明在switch

语句的一个重要特征switch是程序只是跳转到所需的行(到所需的代码块),然后执行所有代码块,直到switch. 不仅是 中的值对应的代码块switch,还有直到 结束的所有代码块switch

例子:

代码 控制台输出
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
Low
Normal
High

给定温度36,程序会进入switch语句,跳转到并执行第一块代码(第一种情况),然后高高兴兴地执行剩下的代码块。

如果你只想执行一个代码块——与匹配案例相关联的代码块——那么你需要用一条break语句结束该块;

例子:

代码 控制台输出
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

您可以省略语句break的最后一个 case switch,因为该块是最后一个有或没有 break 语句的块。


3.默认动作:default

另一个重点。如果列出的所有情况都不匹配switch括号中的表达式,会发生什么情况?

switch如果没有找到匹配的 case,则跳过语句的其余部分,程序将在大括号结束switch语句后继续执行。

也就是说,您还可以使switch语句的行为类似于语句中的 else 分支if-else。为此,请使用default关键字。

case如果块中没有一个sswitch与表达式的值匹配并且switchdefault块,则将执行默认块。例子:

代码 控制台输出
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4.比较switchif-else

语句switch有点类似于if-else语句,只是更复杂。

您始终可以将一条语句的代码重写switch为多条if语句。例子:

带开关的代码 用 if-else 编码
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
} 
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

左边的代码将与右边的代码完全一样。

当一个语句在每个单独的案例中包含各种复杂表达式时,多个语句链if-else是更可取的。if



5. 语句中可以使用哪些表达式switch

并非所有类型都可以用作语句case中的标签switch。您可以使用以下类型的文字:

  • 整数类型:byte, short, int,long
  • char
  • String
  • 任何enum类型

不能使用任何其他类型作为案例标签。

使用enuminsideswitch语句的示例:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

注意:如果使用enuminsideswitch语句,则不需要在标签中的每个值前面写上类名case。只写值就够了。