zoukankan      html  css  js  c++  java
  • 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语言中输出的结果,还是相当然?

  • 相关阅读:
    echarts设置数据在轴线上显示
    LeetCode【189. 旋转数组】
    pycharm快捷键
    LeetCode【461. 汉明距离】
    LeetCode【1051. 高度检查器】
    LeetCode【509. 斐波那契数】
    LeetCode【1021. 删除最外层的括号】
    LeetCode【206. 反转链表】
    LeetCode【344. 反转字符串】
    tensorboard运行
  • 原文地址:https://www.cnblogs.com/LuLei1990/p/4027008.html
Copyright © 2011-2022 走看看