Java - 循环语句 for

Java - 循环语句 for


前言

Java 循环语句 for 与 while 的代码示例及字节码.

代码

Java for 循环代码

public class ForLoop {

    public static void main(String[] args) {
        common();
        iter();
    }

    private static void common() {
        for (var i = -1; i <= 1; i++) {
            System.out.println(i);
        }
    }

    private static void iter() {
        var list = List.of(-1, 0, 1);
        for (var i : list) {
            System.out.println(i);
        }
    }
}

字节码

上述代码 common() 方法和 iter() 方法生成的字节码为:

// common
 0 iconst_m1
 1 istore_0
 2 iload_0
 3 iconst_1
 4 if_icmpgt 20 (+16)
 7 getstatic #15 <java/lang/System.out>
10 iload_0
11 invokevirtual #21 <java/io/PrintStream.println>
14 iinc 0 by 1
17 goto 2 (-15)
20 return

// iter
 0 iconst_m1
 1 invokestatic #27 <java/lang/Integer.valueOf>
 4 iconst_0
 5 invokestatic #27 <java/lang/Integer.valueOf>
 8 iconst_1
 9 invokestatic #27 <java/lang/Integer.valueOf>
12 invokestatic #33 <java/util/List.of>
15 astore_0
16 aload_0
17 invokeinterface #39 <java/util/List.iterator> count 1
22 astore_1
23 aload_1
24 invokeinterface #43 <java/util/Iterator.hasNext> count 1
29 ifeq 52 (+23)
32 aload_1
33 invokeinterface #49 <java/util/Iterator.next> count 1
38 checkcast #28 <java/lang/Integer>
41 astore_2
42 getstatic #15 <java/lang/System.out>
45 aload_2
46 invokevirtual #53 <java/io/PrintStream.println>
49 goto 23 (-26)
52 return

可以看出, for 循环主要是靠 goto 这个字节码完成的.

label

public class ForLabel {

    public static void main(String[] args) {
        breakLabel();
        continueLabel();
    }

    private static void breakLabel() {
        label:
        // i 永远都是等于 -1
        // j == 0 的时候已经 break 最外层的循环
        for (var i = -1; i <= 1; i++) {
            for (var j = -1; j <= 1; j++) {
                for (var k = -1; k <= 1; k++) {
                    if (j == 0) {
                        // 此处相当于 return
                        break label;
                    }
                }
            }
        }
    }

    private static void continueLabel() {
        label:
        for (var i = -1; i <= 1; i++) {
            for (var j = -1; j <= 1; j++) {
                // j 永远无法到达 1
                // j 等于 0 的时候就跳到外层进行下一循环
                for (var k = -1; k <= 1; k++) {
                    if (j == 0) {
                        continue label;
                    }
                }
            }
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值