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

为什么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的原因解析的相关资料,需要的朋友可以参考下

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

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

    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语言switch中break语句的具体作用

    首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇到break语句就退出switch语句,...

    switch函数使用示例

    5.不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。 6.一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case ...

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

    switch函数

    switch.docx `switch`语句是C++中的一种流程控制语句,通常用于根据表达式的值选择执行不同的代码块 下面是`

    `switch`语句是C++中的一种流程控制语句,通常用于根据表达式的值选择执行不同的代码块。下面是`switch`语句的基本结构: ```cpp switch (expression) { case value1: // 当 expression 等于 value1 时执行这里的...

    使用`switch`语句的示例.pdf

    在每个`case`代码块的末尾,我们使用`break`语句来跳出`switch`语句。如果用户的选择没有匹配到任何一个`case`,则会执行`default`代码块。 在以上示例中,如果用户选择了`1`,则会输出"开始游戏...";如果选择了`2...

    有关switch语句的案例

    该案例是我在java教材上抄的,用于演示switch语句的用法,其介绍了switch语句的基本用法,常用于选择有限的某个项目的编写,将各个情况列出像case 1, case 2等等,每个case后再加一个break;用于退出该switch语句。...

    switch语句详细讲解+多个例子.docx

    1. **基本概念**:我们将从头开始,详细解释`switch`语句的各个组成部分,包括`switch`关键字、表达式、`case`标签、`break`语句和`default`标签。我们会逐步讲解它们的作用和用法。 2. **示例1:工作日与周末**:...

    详解Swift的switch...case语句中break关键字的用法

    主要介绍了Swift的switch...case语句中break关键字的用法,是Swift入门学习中的基础知识,需要的朋友可以参考下

    本资源使用 C 语言中 switch 语句作为示例代码,它根据用户输入的数字打印相应的星期天

    在这个代码中,我们使用 switch 语句来根据输入的数字选择特定的 case 代码块来执行,每个 case 代码块负责打印相应的星期天。如果输入的数字不在 1 到 7 的范围内,default 代码块将执行,向用户提供错误信息。 ...

    C#中的switch case使用介绍

    您可能感兴趣的文章:c#入门之分支语句使用方法(三元运算符、if语句、switch语句)C#可以减少或不使用switch有什么方法choosesubject c# switchc#多线程编程基础C# 基础之运算符C#基础:Dispose()、Close()、Finalize...

    if语句 、switch语句 、for循环、break、continue、while、do-while

    if语句 、switch语句 、for循环、break、continue、while、do-while总结 if语句 对比if语句switch语句 1、if语句作用的数据类型:boolean类型。而switch语句作用的类型:byte,short,int,char,String。 2、编码...

    C++编程中break语句和continue语句的学习教程

    如果没有 break 语句,则将执行从匹配的 case 标签到 switch 语句末尾之间的每个语句,包括 default 子句。 在循环中,break 语句将终止执行最近的 do、for 或 while 封闭语句。 控制权将传递给终止语句之后的语句...

    PHP Switch 语句之学习笔记

    Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。 使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。 语法 复制代码 代码如下: switch (expression) { case label1: code to be ...

    php switch语句多个值匹配同一代码块应用示例

    如果case语句没有与表达式成功所执行的代码; } 理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配...

    C++性能剖析教程之switch语句

    几乎每本面向初学者的C语言或C++书籍在前面两章都会提到分支控制语句if……else和switch……case,在某些情况下这两种分支控制语句可以互相替换...有人去深究在if……else和switch……case语句的背后到底有什么异同...

    js中switch语句的学习笔记

    switch 语句用于基于不同条件执行不同动作。 语法格式如下: switch(表达式) { case n: 代码块 break; case n: 代码块 break; default: 默认代码块 } 代码解释: 计算一次 switch 表达式; 把表达式的值与...

Global site tag (gtag.js) - Google Analytics