• for (; ; )和while (true) 没有区别


    看jdk源码的时候,很多地方都是用的for (; ; ),难道跟while (true)有何区别,用javap反汇编了下,实际是一样的

    javap  -v  target.test-classes.com.example.demoweb.DemoWebApplicationTests 
    

      源码

    public class DemoWebApplicationTests {
    
    
        public void test1() {
            for (; ; ) {
                System.out.println(11);
            }
        }
    
        public void test2() {
            while (true) {
                System.out.println(11);
            }
        }
    }  
    

      反汇编后代码

    Warning: Binary file target.test-classes.com.example.demoweb.DemoWebApplicationTests contains com.example.demoweb.DemoWebApplicationTests
    Classfile /Users/pigercc/IdeaProjects/demo-web/target/test-classes/com/example/demoweb/DemoWebApplicationTests.class
      Last modified Mar 15, 2019; size 632 bytes
      MD5 checksum 7c14c6fc2447db0f652238e10b70d796
      Compiled from "DemoWebApplicationTests.java"
    public class com.example.demoweb.DemoWebApplicationTests
      minor version: 0
      major version: 52
      flags: ACC_PUBLIC, ACC_SUPER
    Constant pool:
       #1 = Methodref          #5.#18         // java/lang/Object."<init>":()V
       #2 = Fieldref           #19.#20        // java/lang/System.out:Ljava/io/PrintStream;
       #3 = Methodref          #21.#22        // java/io/PrintStream.println:(I)V
       #4 = Class              #23            // com/example/demoweb/DemoWebApplicationTests
       #5 = Class              #24            // java/lang/Object
       #6 = Utf8               <init>
       #7 = Utf8               ()V
       #8 = Utf8               Code
       #9 = Utf8               LineNumberTable
      #10 = Utf8               LocalVariableTable
      #11 = Utf8               this
      #12 = Utf8               Lcom/example/demoweb/DemoWebApplicationTests;
      #13 = Utf8               test1
      #14 = Utf8               StackMapTable
      #15 = Utf8               test2
      #16 = Utf8               SourceFile
      #17 = Utf8               DemoWebApplicationTests.java
      #18 = NameAndType        #6:#7          // "<init>":()V
      #19 = Class              #25            // java/lang/System
      #20 = NameAndType        #26:#27        // out:Ljava/io/PrintStream;
      #21 = Class              #28            // java/io/PrintStream
      #22 = NameAndType        #29:#30        // println:(I)V
      #23 = Utf8               com/example/demoweb/DemoWebApplicationTests
      #24 = Utf8               java/lang/Object
      #25 = Utf8               java/lang/System
      #26 = Utf8               out
      #27 = Utf8               Ljava/io/PrintStream;
      #28 = Utf8               java/io/PrintStream
      #29 = Utf8               println
      #30 = Utf8               (I)V
    {
      public com.example.demoweb.DemoWebApplicationTests();
        descriptor: ()V
        flags: ACC_PUBLIC
        Code:
          stack=1, locals=1, args_size=1
             0: aload_0
             1: invokespecial #1                  // Method java/lang/Object."<init>":()V
             4: return
          LineNumberTable:
            line 11: 0
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0       5     0  this   Lcom/example/demoweb/DemoWebApplicationTests;
    
      public void test1();
        descriptor: ()V
        flags: ACC_PUBLIC
        Code:
          stack=2, locals=1, args_size=1
             0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
             3: bipush        11
             5: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
             8: goto          0
          LineNumberTable:
            line 16: 0
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0      11     0  this   Lcom/example/demoweb/DemoWebApplicationTests;
          StackMapTable: number_of_entries = 1
            frame_type = 0 /* same */
    
      public void test2();
        descriptor: ()V
        flags: ACC_PUBLIC
        Code:
          stack=2, locals=1, args_size=1
             0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
             3: bipush        11
             5: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
             8: goto          0
          LineNumberTable:
            line 22: 0
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0      11     0  this   Lcom/example/demoweb/DemoWebApplicationTests;
          StackMapTable: number_of_entries = 1
            frame_type = 0 /* same */
    }
    SourceFile: "DemoWebApplicationTests.java"
    

      

  • 相关阅读:
    git reset 用法
    print、println、printf的区别
    GoLang(2)
    GoLang
    OpenCV 图像叠加or图像混合加权实现
    openpyxl
    EJB 的理解
    inotify-tool实时监控服务器文件状态变化 学习总结
    使用docker 安装maven私服 nexus
    dockerfile 学习总结
  • 原文地址:https://www.cnblogs.com/pigercc/p/10536864.html
Copyright © 2020-2023  润新知