switch开关的误区
- 很多人在使用switch时常常出现误区。
- 首先来看看以下代码的bug在哪里?(以Java为例)
-
import java.util.Random; public class test { public static void main(String[] args) { Random r = new Random(); int out = r.nextInt(5); switch(out){ case 3: System.out.println("3?="+out); case 2: case 1: System.out.println("1?="+out); case 4: System.out.println("4?="+out); break; default: System.out.println("5?="+out); } } }
输出结果请看图:
-
- switch语句并不是只执行符合条件的case块,而是从符合条件的case块开始往下执行,只要不跳出,下面的case块也将被执行,直至有跳出(break和switch结束)为止。
- 因此作出以下修改:
-
import java.util.Random; public class test { public static void main(String[] args) { Random r = new Random(); int out = r.nextInt(5); switch(out){ case 3: System.out.println("3?="+out); break; case 2: case 1: System.out.println("1?="+out); break; case 4: System.out.println("4?="+out); break; default: System.out.println("5?="+out); } } }
结果:
-
- 所以建议在每个非空case块中使用break跳出。
请哪出1+1=2的证据,否则我不相信。