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

2025-05-29 0 103

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

java 中使用switch case语句需要加入break 做了具体的实例分析,及编译源码,在源码中分析应该如何使用,大家可以参考下:

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

?

1

2

3

4

5

6

7

8

9

10

11

12
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打开后,我们可以看到如下内容:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
public static void test(int index);

iload_0 [index]

tableswitch default: 49

case 1: 28

case 2: 35

case 3: 42

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_1

invokevirtual java.io.PrintStream.println(int) : void [28]

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_2

invokevirtual java.io.PrintStream.println(int) : void [28]

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_3

invokevirtual java.io.PrintStream.println(int) : void [28]

getstatic java.lang.System.out : java.io.PrintStream [22]

ldc <String "Default"> [33]

invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]

return

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
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打开后可以看到如下内容:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
public static void test(int index);

iload_0 [index]

tableswitch default: 58

case 1: 28

case 2: 38

case 3: 48

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_1

invokevirtual java.io.PrintStream.println(int) : void [28]

goto 66

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_2

invokevirtual java.io.PrintStream.println(int) : void [28]

goto 66

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_3

invokevirtual java.io.PrintStream.println(int) : void [28]

goto 66

getstatic java.lang.System.out : java.io.PrintStream [22]

ldc <String "Default"> [33]

invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]

return

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://elim.iteye.com/blog/2367328

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java中switch case语句需要加入break的原因解析 https://www.kuaiidc.com/115702.html

相关文章

发表评论
暂无评论