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);
    }
}

二、 输出结果

0
1

 

三、 字节码

 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语言中输出的结果,还是相当然?

原文地址:https://www.cnblogs.com/LuLei1990/p/4027008.html