黑马程序员技术交流社区

标题: 有关switch的穿透问题。 [打印本页]

作者: yi651312197    时间: 2016-1-18 21:07
标题: 有关switch的穿透问题。
  1. public class c {

  2.         public static void main(String[] args){
  3.                

  4.                 int x=2,y=3;
  5.                 switch(x)
  6.                 {
  7.                         default:
  8.                                 y++;
  9.                         case 3:
  10.                                 y++;
  11.                                 
  12.                         case 4:
  13.                                 y++;
  14.                                 
  15.                 }
  16.                 System.out.println("y="+y);
  17.         }
  18. }
复制代码
穿透不好理解

作者: 宋叔辉    时间: 2016-1-18 21:51
break;语句使用在循环语句和switch语句中
switch结束分为两种情况:
1.遇到break;
2.遇到switch语句的右大括号
对于你这里遇到的问题来说,这里没有break语句,所以会一直从第一句运行下去
我们先来理一下思路:
这里switch(x)   x=2     case的值中没有对应的值所以,这里会从default开始执行,
在执行为default后没有遇到break; 所以这里switch并不会停止执行而是按顺序结构执行
因为switch停止执行的情况只有以上两种.
所以会接着继续执行case 3:  case 4:
所谓的穿透就是没有遇到break;程序一直往下执行
求技术分~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~


作者: 擎天柱    时间: 2016-1-18 21:53
说白了就是不加break时,后面继续执行,好像是吧
作者: 海湾    时间: 2016-1-18 22:37
他这个代码是从上到下执行的,x = 2 匹配不到 就开始执行default y++  y的值变成了4,由于没有break ,程序不会中断,会继续执行,并且不会再次匹配,也就是说不在看case 的值了,直到遇到右括号程序停止。y++了三次,变成了6 。
作者: yehua1026    时间: 2016-1-18 22:46
结果是6
作者: 贫僧    时间: 2016-1-18 23:23
穿透就是程序继续向下执行
作者: DDK畅    时间: 2016-1-19 00:16
结果应该是6
作者: zhanganping    时间: 2016-1-19 00:24
结果为6
作者: hansnowqiang    时间: 2016-1-19 09:04
你不写break,他就从配对的case那里往下都运行了。
写了break,从case运行到break




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