zoukankan      html  css  js  c++  java
  • int i=0;i=i++

    package algorithms.com.guan.javajicu; 
    public class Inc { 
        public static void main(String[] args) { 
           Inc inc = new Inc(); 
           int i = 234; 
           inc.fermin(i); 
           i= i ++; 
           System.out.println(i);
        
        } 
        void fermin(int i){ 
           i++;
        } 
    }

    运行结果是234

    分析如下

    看看字节码就明白了
    源代码:

    1 public class test{
    2 public static void main(String[] args){
    3 int i = 234;
    4 i = i++;
    5 System.out.println(i);
    6 }
    7 }
    编译之后的字节码:
    public static void main(java.lang.String[]);
    0: sipush 234
    3: istore_1
    4: iload_1
    5: iinc 1, 1
    8: istore_1
    9: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
    12: iload_1
    13: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
    16: return 
    我们分析一下字节码
    0: sipush 234 //将常量234压入操作数栈
    3: istore_1 //将操作数栈中的数值存到局部变量区1号位置上
    4: iload_1 //将局部变量区1号位置上的值压入操作数栈
    5: iinc 1, 1 //将局部变量区1号位置上的数值增1
    8: istore_1 //将操作数栈中的数值存到局部变量区1号位置上

    现在很明显了:它先把i压入栈,然后把i(在原来的位置上)加1,然后又把栈上的旧值写回i。这就导致了i被原来的旧值给覆盖了,所以值没有变化。

  • 相关阅读:
    Python学习(四十三)—— Djago-admin管理工具
    Python心得基础篇【1】入门篇
    ServletRequest接口和HttpServletRequest接口
    Java swing
    postgresSQL指令
    Oracle数据库相关
    Java 接口
    Java 求一段代码运行所需要的时间——模板方法设计模式
    Java SE基础巩固
    Java开发环境
  • 原文地址:https://www.cnblogs.com/lijingran/p/8823052.html
Copyright © 2011-2022 走看看