java a%2==0_Java 初始化a=2 打印a+++a++为5

这段程序大概这样:

public static void main(String[] args){

int a = 2;

System.out.println(a+++a++);

}

编译后的字节码为:

public static void main(java.lang.String[]);

descriptor: ([Ljava/lang/String;)V

flags: ACC_PUBLIC, ACC_STATIC

Code:

stack=3, locals=2, args_size=1

0: iconst_2 /*将int型2推送至栈顶*/

1: istore_1 /*将栈顶int型数值存入第二个本地变量,这里就是完成a=2的步骤*/

2: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; /*获取指定类的静态域,并将其值压入栈顶*/

5: iload_1 /*将第二个int型本地变量推送至栈顶,现在栈顶的值为a的值 2 */

6: iinc 1, 1 /*将指定int型变量增加指定值,现在a的值为3 */

9: iload_1 /*将第二个int型本地变量推送至栈顶,栈顶的值为 3 */

10: iinc 1, 1 /*将指定int型变量增加指定值,现在a为4*/

13: iadd /*将栈顶两int型数值相加并将结果压入栈顶,前面压入栈顶的值分别为2和3,所以现在栈顶的值为 5 */

14: invokevirtual #3 // Method java/io/PrintStream.println:(I)V

17: return

LineNumberTable:

line 4: 0

line 5: 2

line 6: 17

}

SourceFile: "Test.java"

现在,如果把程序换一下:

public static void main(String[] args){

int a = 2;

System.out.println(a+++(++a));

}

现在字节码为:

public static void main(java.lang.String[]);

descriptor: ([Ljava/lang/String;)V

flags: ACC_PUBLIC, ACC_STATIC

Code:

stack=3, locals=2, args_size=1

0: iconst_2

1: istore_1 /*完成a=2的赋值*/

2: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;

5: iload_1 /*a的值压入栈顶,为 2 */

6: iinc 1, 1 /*a自增长 a=3*/

9: iinc 1, 1 /*a自增长 a=4*/

12: iload_1 /*a值压入栈顶,为 4*/

13: iadd /*两值相加,为 6*/

14: invokevirtual #3 // Method java/io/PrintStream.println:(I)V

17: return

LineNumberTable:

line 4: 0

line 5: 2

line 6: 17

}

SourceFile: "Test.java"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值