黑马程序员技术交流社区

标题: switch输出结果 [打印本页]

作者: hamesksk    时间: 2015-3-17 09:46
标题: switch输出结果
  1. int x = 2;
  2.                 switch (x) {
  3.                 case 1:
  4.                         System.out.println(1);
  5.                 case 2:
  6.                 case 3:
  7.                         System.out.println(3);
  8.                 case 4:
  9.                         System.out.println(4);
  10.                 }
复制代码
自己找了题做,这题居然做错了,也来考考同学们!


作者: 艺多不压身丶    时间: 2015-3-17 09:52
case穿透,结果是34
作者: 殷俊    时间: 2015-3-17 10:10
额,楼主能解释下为什么吗?谢了
作者: 殷俊    时间: 2015-3-17 10:31
恩,不停下来是,但是为什么会打印34呢,打印3还想的懂,但是4是为什么
作者: liuzhen    时间: 2015-3-17 10:54
因为没有break,所以会打印34
作者: 艺多不压身丶    时间: 2015-3-17 10:57
                        switch(表达式)
                        case 常亮表达式:
                                语句1
                        case 常量表达式:
                                语句2
                                break;
case 就好像if else一样。但是他们也是有区别的。
break是用于循环内跳出循环用的,case判断条件
条件满足就会执行语句体,在接着break跳出。
当然break也可以省略,但是会出现case穿透现象。
如果case后面没有break的话他会一直往下执行,直到执行到break为止。

我是这么理解的。就是一个case对应一个break,如果第一个case没有读到break的话继续往下执行。但是不会判断下面的case而是直接执行语句,直到读到break为止。
作者: 艺多不压身丶    时间: 2015-3-17 10:58
殷俊 发表于 2015-3-17 10:31
恩,不停下来是,但是为什么会打印34呢,打印3还想的懂,但是4是为什么

switch(表达式)
                        case 常亮表达式:
                                语句1
                        case 常量表达式:
                                语句2
                                break;
case 就好像if else一样。但是他们也是有区别的。
break是用于循环内跳出循环用的,case判断条件
条件满足就会执行语句体,在接着break跳出。
当然break也可以省略,但是会出现case穿透现象。
如果case后面没有break的话他会一直往下执行,直到执行到break为止。

我是这么理解的。就是一个case对应一个break,如果第一个case没有读到break的话继续往下执行。但是不会判断下面的case而是直接执行语句,直到读到break为止。
作者: 殷俊    时间: 2015-3-17 11:06
艺多不压身丶 发表于 2015-3-17 10:58
switch(表达式)
                        case 常亮表达式:
                                语句1

哦哦,差不多懂了,谢谢版主:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2