++i 和i++的区别

++i 和i++

    public static void main(String[] args) {
        int spi=16;
        int spi2 =++spi;
        System.out.println(spi);

        int sd =16;
        sd=sd++;
        System.out.println(sd);
    }

运行结果:

17
16

使用javap -c 查看:

public class com.company.Main {
  public com.company.Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: bipush        16                 //将16压入操作数栈
       2: istore_1							//弹出操作数栈的首位并保存在局部变量的1位置(spi=)
       3: iinc          1, 1				//局部变量1位置进行+1操作
       6: iload_1							//将局部变量1压入操作数栈
       7: istore_2							//弹出操作数栈的首位并保存在局部变量的2位置(spi2=)
       8: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
      11: iload_1				
      12: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V
      15: bipush        16					//将16压入操作数栈
      17: istore_3							//弹出操作数栈的首位并保存在局部变量的3位置(sd=)
      18: iload_3							//将局部变量3压入操作数栈	
      19: iinc          3, 1				//将局部变量3进行+1操作
      22: istore_3							//弹出操作数栈的首位并保存在局部变量的3位置(sd=)
      23: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
      26: iload_3
      27: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V
      30: return
}

从0–> 6 和 15–>19 可以得到

++i 操作是先局部变量+1再压栈操作,

i++ 是直接压栈后局部变量自+1

i++的操作直接导致操作栈数没有进行+1操作;可以认为是个临时变量。

所以得出: i++和++i并没有赋值先后顺序的说法,不管 s=i++还是s=++i,都是先进行自增++运算,再进行赋值;只是两次赋值使用的值是不一样的,一个是使用自增后的值,一个是使用临时变量的值.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值