带有字符串错误输出的 Switch 语句

Switch statement with string wrong output

我遇到了这个基本问题,其中 switch case 与字符串一起使用。

break 语句不在 case 之间使用,但为什么即使它不匹配 case 字符串,它也会适用于所有 case?

所以我很想知道 为什么输出是 3 而不是 1?

 public static void main(String [] args)
      {
        int wd=0;

        String days[]={"sun","mon","wed","sat"};

        for(String s:days)
        {
          switch (s)
          {
          case "sat":
          case "sun":
            wd-=1;
            break;
          case "mon":
            wd++;
          case "wed":
            wd+=2;
          }
        }
        System.out.println(wd);
      }

您在 case "mon" 末尾没有 break;,因此值也增加 2

你没想到的是,流程:

0    -1   -1   +1+2  +2 = 3
^     ^    ^   ^     ^
init sat  sun  mon  wed 

如下添加中断将导致输出 1

case "mon":
  wd++;
  break;

"sat" 和 "mon" 的案例末尾没有 break;。 这意味着,当一个元素匹配 "sat" 和 "mon" case 时,它将执行该 case 中包含的代码,但随后会落入下一个 case。

到达break时,跳出开关块。 这将停止在块内执行更多代码和案例测试。

在这种情况下。当它测试 "sat" 和 "mon" 时,它没有看到 break,因此继续测试。

0   -1    0    2    4    3
^    ^    ^    ^    ^    ^
    sun  mon  mon  wed  sat