首页 > 代码库 > java 中的 i++ 和 ++i

java 中的 i++ 和 ++i

 

熟悉c/c++中的i++和++i,那么你知道下面的java代码效果是什么吗?

 

一 、 代码示例

/** *  * @author elelule *  */public class TestPlusPlusOperator {    public void test1() {        int i = 0;        i = i++;        System.out.println(i);    }    public void test2() {        int i = 0;        i = ++i;        System.out.println(i);    }}

 

 

二、 输出结果

 

01

 

三、 字节码

 public void test1();   Code:      0: iconst_0      1: istore_1      2: iload_1                           //将存储栈帧中1号单元的 i load 到操作数栈帧上      3: iinc          1, 1                //将存储栈帧中的1号单元中的数据加 1      6: istore_1                          //将操作栈帧上的数据存保存到存储栈帧的1号单元中      7: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;     10: iload_1     11: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V     14: return public void test2();   Code:      0: iconst_0      1: istore_1      2: iinc          1, 1                 // 将存储栈帧中的1号单元中的数据加 1      5: iload_1                            // 将存储栈帧中的1号单元中的数据load 到操作数栈帧上      6: istore_1                           // 将操作栈帧中的数据保存到存储栈帧中的 1 号单元中      7: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;     10: iload_1     11: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V     14: return

四 、 总结

 从上面的字节码可以看到,i=i++; 这条语句被字节码翻译成 “先挪走,然后对存储单元中的数据加1,最后把原来的数据再挪回来”,而 i=++i;这条语句被翻译成 “先对存储单元中的数据加1,然后挪走,最后再挪回来”。是不是c/c++中的不一样呢?当然!你可以试试这两个语句在c语言中输出的结果,还是相当然?

java 中的 i++ 和 ++i