1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| 0 new #2 <java/util/Scanner> 3 dup 4 getstatic #3 <java/lang/System.in : Ljava/io/InputStream;> 7 invokespecial #4 <java/util/Scanner.<init> : (Ljava/io/InputStream;)V> 10 astore_1 将操作数栈顶的引用类型Scanner(对象引用)存储到局部变量表的索引 1 位置 并弹出 11 aload_1
12 invokevirtual #5 <java/util/Scanner.nextInt : ()I>
15 istore_2 将读取到的第一个整数存储到局部变量表的第二个位置(index 2)。并弹出 16 aload_1 加载 Scanner 对象引用。 17 invokevirtual #5 <java/util/Scanner.nextInt : ()I> 20 istore_3 将读取到的第一个整数存储到局部变量表的第二个位置(index 3)。并弹出 21 aload_1 加载 Scanner 对象引用 22 invokevirtual #6 <java/util/Scanner.close : ()V> 调用 Scanner 的 close 方法,关闭输入流。 --------- Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); scanner.close(); ------------ 25 iload_2 26 iload_3 将 2 3 索引值存储到操作数栈
27 if_icmple 55 (+28) if(a>b) ->比较大小 System.out.printf("%d",a+b);
30 getstatic #7 <java/lang/System.out : Ljava/io/PrintStream;>
33 ldc #8 <%d>
35 iconst_1 将常量整数 1 压入操作数栈,表示需要一个参数进行格式化。
36 anewarray #9 <java/lang/Object> 创建一个 Object 类型的新数组,大小为 1。 39 dup 复制新建的数组引用。 压入操作数栈 40 iconst_0 将整数 0 压入操作数栈,表示数组的索引位置。 41 iload_2 42 iload_3 43 iadd
44 invokestatic #10 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;> 调用 Integer.valueOf 方法,将和转换为 Integer 对象。 47 aastore 将 Integer 对象存储到数组的第一个位置。 48 invokevirtual #11 <java/io/PrintStream.printf : (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;> 调用 printf 方法输出结果。 51 pop 弹出 PrintStream 对象的引用,清理操作数栈。 52 goto 77 (+25) 77
代码跳处 System.out.printf("%d",a+b); 55 getstatic #7 <java/lang/System.out : Ljava/io/PrintStream;> 58 ldc #8 <%d> 60 iconst_1 61 anewarray #9 <java/lang/Object> 64 dup 65 iconst_0 66 iload_2 67 iload_3 68 iadd 69 invokestatic #10 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;> 72 aastore 73 invokevirtual #11 <java/io/PrintStream.printf : (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;> 76 pop 77 return
|