java int类型每次自增_java基础 int变量自增 效率问题

本文论述java中以下三条语句的效率问题。

i++;

i = i+1;

i += 1;

所采用的的方法是只写出包含这三条语句的方法,编译成字节码,然后分析字节码指令。

下面是我的java源码:

public class Some {

public void add1(int a){

a++;

}

public void add2(int a){

a = a + 1;

}

public void add3(int a){

a += 1;

}

}

使用javac指令编译过后(javac Some.java),会生成Some.class文件。

然后使用指令 javap -verbose Some,显示编译后的字节码指令。

如下:

public void add1(int);

descriptor: (I)V

flags: ACC_PUBLIC

Code:

stack=0, locals=2, args_size=2

0: iinc 1, 1

3: return

LineNumberTable:

line 3: 0

line 4: 3

public void add2(int);

descriptor: (I)V

flags: ACC_PUBLIC

Code:

stack=2, locals=2, args_size=2

0: iload_1

1: iconst_1

2: iadd

3: istore_1

4: return

LineNumberTable:

line 6: 0

line 7: 4

public void add3(int);

descriptor: (I)V

flags: ACC_PUBLIC

Code:

stack=0, locals=2, args_size=2

0: iinc 1, 1

3: return

LineNumberTable:

line 9: 0

line 10: 3

可以看到,add2方法中的i = i+1;通过编译形成了4条字节码指令:

0: iload_1

1: iconst_1

2: iadd

3: istore_1

并且操作数栈深度为2,stack=2, locals=2, args_size=2

add1方法中的i++; add3中的i += 1;通过编译形成了1条字节码指令:

0: iinc 1, 1

并且操作数栈为0, stack=0, locals=2, args_size=2

总结:

i++;和i += 1;形成的指令数较少,且不需要操作数栈。相对而言,i = i+1;需要至少2个操作数栈深度,并且形成的指令数较多。故,i++;和i+= 1;的效率一样,并且二者的效率都优于i = i+1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值