`
234390216
  • 浏览: 10218778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462016
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1774438
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1397506
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394706
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679510
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530294
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1180704
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:466030
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151030
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:67735
社区版块
存档分类
最新评论

为什么switch case语句需要加入break

    博客分类:
  • java
阅读更多

 

假设我们有如下这样一个switch语句:

	public static void test(int index) {
		switch (index) {
		case 1:
			System.out.println(1);
		case 2:
			System.out.println(2);
		case 3:
			System.out.println(3);
		default:
			System.out.println("Default");
		}
	}

当我们在执行上面的方法时,如果我们传入的参数是1,那么会输出1、2、3和default,如果传入的参数是2,那么会输出2、3和default,这是为什么呢?这是因为switch的case语句是用来根据满足条件从确定的行开始执行的,如果不加入break语句跳出switch逻辑,则会一直往下执行,这也是为什么上面的测试代码会出现传入参数为2时会输出2、3和default。

为此,我们也可以看一下上面的代码编译后的class文件,通过eclipse打开后,我们可以看到如下内容:

  public static void test(int index);
     0  iload_0 [index]
     1  tableswitch default: 49
          case 1: 28
          case 2: 35
          case 3: 42
    28  getstatic java.lang.System.out : java.io.PrintStream [22]
    31  iconst_1
    32  invokevirtual java.io.PrintStream.println(int) : void [28]
    35  getstatic java.lang.System.out : java.io.PrintStream [22]
    38  iconst_2
    39  invokevirtual java.io.PrintStream.println(int) : void [28]
    42  getstatic java.lang.System.out : java.io.PrintStream [22]
    45  iconst_3
    46  invokevirtual java.io.PrintStream.println(int) : void [28]
    49  getstatic java.lang.System.out : java.io.PrintStream [22]
    52  ldc <String "Default"> [33]
    54  invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]
    57  return

 上面编译后的语句每行前面的数字是程序的指定序号,我们可以把它简单的理解为行号,我们可以看到数字为1的那行定义了一个switch指定,其默认会跳到49行,如果传入的参数是1则跳到28行执行,如果是2则跳到35行执行,如果是3则跳到42行执行。那么我们先来看程序的第28行到32行,其对应的就是调用System.out.println输出1,完了后没有特殊的指令,程序是会继续顺序执行的,也就是会依次执行35、38、直到57行结束。

如果我们把源程序的case语句末端都加上break语句,如下这样:

	public static void test(int index) {
		switch (index) {
		case 1:
			System.out.println(1);
			break;
		case 2:
			System.out.println(2);
			break;
		case 3:
			System.out.println(3);
			break;
		default:
			System.out.println("Default");
			break;
		}
	}

 那么对应的编译的class文件通过Eclipse打开后可以看到如下内容:

  public static void test(int index);
     0  iload_0 [index]
     1  tableswitch default: 58
          case 1: 28
          case 2: 38
          case 3: 48
    28  getstatic java.lang.System.out : java.io.PrintStream [22]
    31  iconst_1
    32  invokevirtual java.io.PrintStream.println(int) : void [28]
    35  goto 66
    38  getstatic java.lang.System.out : java.io.PrintStream [22]
    41  iconst_2
    42  invokevirtual java.io.PrintStream.println(int) : void [28]
    45  goto 66
    48  getstatic java.lang.System.out : java.io.PrintStream [22]
    51  iconst_3
    52  invokevirtual java.io.PrintStream.println(int) : void [28]
    55  goto 66
    58  getstatic java.lang.System.out : java.io.PrintStream [22]
    61  ldc <String "Default"> [33]
    63  invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]
    66  return

 我们可以看到switch语句默认会执行58行,如果传入的参数是1则会执行28行,如果是2则会从38行开始执行,接着我们可以看到28行开始是执行的System.out.println(1)的逻辑,完了后会顺序执行到35行,35行的指令是会引导程序执行到第66行,也就是跳出了switch逻辑,对应我们的测试代码就是程序结束了。这也是为什么我们在使用switch语句时通常需要在每个case语句结束时加入break指令的原因。

 

 

 

 

0
0
分享到:
评论

相关推荐

    java中switch case语句需要加入break的原因解析

    Java中switch case语句需要加入break的原因解析 Java中switch case语句需要加入break的原因解析是因为switch语句的执行机制。switch语句的执行机制是根据满足条件从确定的行开始执行,如果不加入break语句跳出...

    Java switch case 语句.docx

    - 不包含break的case语句会导致程序继续执行下一个case,直到遇到break或到达switch的结尾。 5. **default分支**: - default是可选的,通常作为switch语句的最后一个分支,但也可以放在其他位置。 - 当表达式的...

    C语言switch语句学习教案.pptx

    * 在 switch 语句中,如果没有 break 语句,程序将继续执行到下一个 case 语句。 * 如果没有 default 语句,程序将执行到结束。 * 在 switch 语句中,各个 case 语句的顺序并不影响执行结果。 switch 语句的优点:...

    基于C语言实现switch case语句(源码)

    在main函数中,定义了一个字符变量grade,用于存储输入的成绩等级。 使用printf函数提示用户输入成绩等级,并使用scanf函数读取用户输入的成绩等级,存储到变量grade中。...使用break语句终止switch case语句的执行。

    c语言switch case语句.docx 代码

    - 每个`case`后面通常都跟着一个`break`语句,它的作用是跳出当前`switch`结构,避免执行后续的`case`。如果没有`break`,程序会继续执行下一个`case`的代码,这种情况称为“贯穿”(fallthrough)现象。 3. **...

    switch、case、break语句的简单应用

    3. **break**:`break`语句用于跳出当前`switch`结构,防止代码继续执行下一个`case`。若没有`break`,程序会"落入"(fall through)下一个`case`,除非遇到`break`或者`switch`结束。 4. **default**:可选的`...

    switch语句

    3. `break`:每个`case`后通常有一个`break`语句,它的作用是跳出整个`switch`结构,防止执行下一个`case`的代码。如果不使用`break`,则会继续执行后续的`case`,直到遇到`break`或到达`default`。 4. `default`:...

    switch+case语句例子成绩

    执行完代码块后,通常使用 `break` 语句跳出 `switch` 语句,防止执行后续的 `case`。如果没有匹配的 `case`,则执行 `default` 代码块(可选)。 在描述中的例子中,`switch` 语句的 `expression` 是 `score / 10`...

    计算机二级C语言考点18switch-case语句.pdf

    C语言switch-case语句详解 switch-case语句是C语言中的一种选择语句,用于根据不同的条件执行...switch-case语句是C语言中的一种重要的选择语句,需要掌握其基本格式、执行流程和考点,以便更好地应用于实际编程中。

    switch 语句与 case 语句一起使用,每个 case 对应一个可能的值.rar

    在编程语言中,`switch`语句和`case`语句是控制流程的重要组成部分,尤其在处理多条件分支时显得尤为高效。它们通常用于替代多个`if...else if...else`结构,使得代码更加简洁易读。下面我们将深入探讨`switch`语句...

    C++语言:switch语句最详细讲解.pdf

    4. 如果switch表达式的值等于某个case后的值,但该case语句不包含break语句,则控制流将继续执行后续的case语句,直到遇到break语句为止。 二、switch语句的注意要点 1. switch语句中使用的表达式必须是整型或可以...

    switch-case语句用法

    **switch-case语句**是C语言中用于处理多分支选择的一种结构,它的出现是为了替代复杂的if-else-if链,使得代码更加简洁、易读。在处理多个可能的条件分支时,switch-case语句能有效地组织代码,使得每一种情况对应...

    C语言switch语句PPT课件.pptx

    (5) 一般在各个case语句最后应该加一break语句,可以使程序流程跳出Switch结构。否则会从入口处一直向下执行。 (6) 各个case和default出现的先后次序,并不影响执行结果。default可以没有。 (7) 多个case可共用一...

    c 语言 switch 语句学习

    - 如果存在 `break` 语句,当找到一个匹配的 `case` 子句后,执行该子句内的代码直至遇到 `break` 语句为止,随后跳出整个 switch 语句。 - 若找不到匹配的 `case` 子句,则执行 `default` 子句(如果存在),然后...

    C语言中的switch语句基本用法

    * switch语句的case语句必须是常量值。 * switch语句的default语句是可选的。 * break语句必须在每个case语句的末尾。 switch语句是C语言中的一种非常有用的控制结构,能够简化代码,提高代码的可读性和维护性。...

    switch语句的妙用(必看篇)

    switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console.log(a); break; default: break; } 这里a和case列表中从上而下逐一做比较,如果...

    计算机二级C语言 考点18 switch-case 语句.pdf

    switch-case 语句 switch-case 语句是C语言中的一种选择语句,用于根据不同的值执行不同的代码块。...switch 语句的执行过程为计算 expression 的值,并将其与各个 case 的值进行比较,然后执行对应的代码块。

    C++switch goto break for 循环 教程与实例

    下面将详细介绍 C++ 中的 switch 语句、goto 语句、break 语句、for 循环语句等控制语句。 一、switch 语句 switch 语句是一种选择结构语句,用于根据不同的值执行不同的语句。其基本形式为: ```cpp switch (整型...

    单片机资料c源码switch-case-break语句

    单片机资料c源码switch-case-break语句提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics