你知道java中 i=i++后i的值是多少么?之二

2025-10-23 13:06:28

1、如果i++后,不进行赋值操作,i的值为2

下面就来比较一下,这种情况生成的bytecode和上一个有什么不同

先来看看改过后代码吧

Show me the code.

Code:

package chapter4;

/**

* Created by MyWorld on 2016/3/17.

*/

public class IPlusPlusDemo {

   public static void main(String[] args) {

       int i = 1;

       i++;

       System.out.println(i);

   }

}

你知道java中 i=i++后i的值是多少么?之二

2、执行上面的代码,看看执行结果会是多少。

终于是2了。和平时的认知保持一致了

你知道java中 i=i++后i的值是多少么?之二

3、看看这种情况的bytecode

命令:

javap -c  IPlusPlusDemo.class

你知道java中 i=i++后i的值是多少么?之二

4、生成的btyecode:

Compiled from "IPlusPlusDemo.java"

public class chapter4.IPlusPlusDemo {

  public chapter4.IPlusPlusDemo();

    Code:

       0: aload_0

       1: invokespecial #1                  // Method java/lang/Object."<init>":

()V

       4: return

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

    Code:

       0: iconst_1

       1: istore_1

       2: iinc          1, 1

       5: getstatic     #2                  // Field java/lang/System.out:Ljava/

io/PrintStream;

       8: iload_1

       9: invokevirtual #3                  // Method java/io/PrintStream.printl

n:(I)V

      12: return

}

你知道java中 i=i++后i的值是多少么?之二

5、按照上方的经验,找到相关的bytecode如下:

     0: iconst_1   //把int型常量1push到栈中,即int 1现在在栈顶了

     1: istore_1   //pop出栈顶的1,给i赋值。执行结束后i存放的值为1

     2: iinc          1, 1//自增指令。变量i的值++,即当前i的值为2

所以,现在i的值是2了。

当前bytecode的情况和实际执行的结果是一致的

你知道java中 i=i++后i的值是多少么?之二

6、和i=i++时是不是少了两条指令?

少了的两条指令的作用是什么呢?

       2: iload_1  //将变量i的值1再压栈,即放到栈顶。这条指令为什么少了呢?是不是进行++运算而进行的特殊处理呢

       6: istore_1 //这个就是i=i++中的赋值操作。没有赋值,少了这条指令是对的

你知道java中 i=i++后i的值是多少么?之二

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢