Java 中 switch 详解

最近面试了不少Java开发工程师发现对switch比较陌生,我尝试阐述一下我对它的理解和用法。

swich 是什么

switch源于C语言用在编程中,是一个判断选择代码(有时也被划归为一种选择语句)。其功能就是控制流程流转的。switch 语句可以从一系列代码中选出一段去执行。它的格式如下:

switch(integral-selector) {
    case integral-value1 : statement; break;
    case integral-value2 : statement;    break;
    case integral-value3 : statement;    break;
    case integral-value4 : statement;    break;
    case integral-value5 : statement;    break;
    // ...
    default: statement;
}

其中,integral-selector (整数选择因子)是一个能够产生整数值的表达式,switch 能够将这个表达式的结果与每个 integral-value (整数值)相比较。若发现相符的,就执行对应的语句(简单或复合语句,其中并不需要括号)。若没有发现相符的,就执行 default 语句。

在上面的定义中,大家会注意到每个 case 均以一个 break 结尾。这样可使执行流程跳转至 switch 主体的末尾。这是构建 switch 语句的一种传统方式,但 break 是可选的。若省略 break, 会继续执行后面的 case 语句的代码,直到遇到一个 break 为止。通常我们不想出现这种情况,但对有经验的程序员来说,也许能够善加利用。注意最后的 default 语句没有 break,因为执行流程已到了 break 的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在 default 语句的末尾放置一个 break,尽管它并没有任何实际的作用。

遵守switch语句规则

  • switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
  • 只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
  • switch()的参数类型不能为实型 。
  • case 标签必须为字符串常量或字面量。
  • case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。

switch 字符串

Java 7 增加了在字符串上 switch 的用法。下例展示了从一组 String 中选择可能值的传统方法,以及新式方法:

public class StringSwitch {
  public static void main(String[] args) {
    String color = "red";
    // 老的方式: 使用 if-then 判断
    if("red".equals(color)) {
      System.out.println("RED");
    } else if("yellow".equals(color)) {
      System.out.println("YELLOW");
    } else if("blue".equals(color)) {
      System.out.println("BLUE");
    } else {
      System.out.println("Unknown");
    }
    // 新的方法: 字符串搭配 switch
    switch(color) {
      case "red":
        System.out.println("RED");
        break;
      case "yellow":
        System.out.println("YELLOW");
        break;
      case "blue":
        System.out.println("BLUE");
        break;
      default:
        System.out.println("Unknown");
        break;
    }
  }
}

输出结果:

RED
RED

一旦理解了 switch,你会明白这其实就是一个逻辑扩展的语法糖。新的编码方式能使得结果更清晰,更易于理解和维护。下篇文章聊一聊switch 字符串背后的原理。


觉得这篇内容帮到了您,请您帮忙点赞评论和转发。

关注公众号『 码农洞见 』,有你才狂热。

你可能感兴趣的:(java后端)