欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

【Java】不正当使用break语句的危害

发布时间:2025/3/15 java 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Java】不正当使用break语句的危害 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

(这里是临时打的,连IDE都没开,但是建议不要随便用Tab,在IDE里也要设置一下Tab->4*Space)

switch语句块不使用break,导致一直执行


其实图1的代码和下面的代码运行结果是一样的……

switch (a) { case 1: case 2: defalut:System.out.println("1");System.out.println("2");System.out.println("3"); }

for( ; ; )、while(true)等无限循环里面不使用break导致真正的“死循环”

//a为输入的值 Scanner scanner = new Scanner(System.in); String a = scanner.nextLine(); int a = Integer.parseInt(a); for (;;) {if (a == 1) {//do something} else if (a == 2) {//do something} else {//do something (但是此时应该退出,没有使用break)} }

结果就是死循环呐,不过这只是一个demo,一般人不会写这种代码……
不过我在写那个置顶的博文——聊天机器人的时候那个系统就是有必要的退出和返回,依靠的就是从“无限循环”中跳出来,虽不见得是break,但思想是类似的。

不使用循环的“标签”,编译器:我咋知道你想break哪个?

Java语法里允许给for循环上一个“标签”(while也有,最后面给一个demo):

public class BreakTest2 {public static void main(String[] args) {List<String> strList = new ArrayList<>();strList.add("a");strList.add("b");strList.add("c");outer:for (String s : strList) {for (int i = 0; i < 2; i++) {System.out.println(i);if ("b".equals(s)) {break outer;}}}} }

运行结果

0 1 0

如果我们不加这个tag(outer):

public class BreakTest2 {public static void main(String[] args) {List<String> strList = new ArrayList<>();strList.add("a");strList.add("b");strList.add("c");for (String s : strList) {for (int i = 0; i < 2; i++) {System.out.println(i);if ("b".equals(s)) {break;}}}} }

运行结果

0 1 0 0 1

显然,只break了内层循环,编译器不知道是想跳转到外层循环以外……
凄惨……

亲测之后补充一下,while循环也可以加tag:


测试结果

0 1

证明有效哇

注意:如果没有特殊说明,编译器默认break只跳出当前循环(最内层)😉

补充

还有一些情况,比如某些算法例如线性的查找,找到以后(如果就是要找的唯一答案),break至少保证了一些较好的情况可能存在,否则只能把整个需要遍历的部分扫描一遍(哪怕已经找到了,可以break或者return),导致算法运行时全是“最坏情况”。

总结

以上是生活随笔为你收集整理的【Java】不正当使用break语句的危害的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。