zoukankan      html  css  js  c++  java
  • java中的自增问题

    运行下面这段代码,其结果是什么呢?

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

    结果是:0

    上述类似代码在C/C++中运行结果是:1,这是为什么呢?

    这是因为Java使用了中间缓存变量机制
    i=i++;等同于:
    temp=i; (等号右边的i)
    i=i+1;      (等号右边的i)
    i=temp;   (等号左边的i)
    而i=++i;则等同于:
    i=i+1;
    temp=i;
    i=temp;

    详解:

    jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。

    jvm会这样运行这条语句:

    步骤1   jvm把i的值(其值是0)拷贝到临时变量区(temp=0)。

    步骤2 变量区i的值加1,这时i的值是1。

    步骤3 返回临时变量区(temp)的值,注意这个值是0,没修改过。

    步骤4 返回值赋值给变量区的i,此时i的值被重置成0。

     c/c++中没有另外设置一个临时变量或是临时空间来保存i,所有操作都是在一个内存空间中完成的,所以在c/c++中是1。

  • 相关阅读:
    Linux安装.net core
    在IIS中如何配置SSL(https)
    Lambda的前世今生
    Java建造者模式
    leetcode 83 Remove Duplicates from Sorted List
    【设计】Office
    【设计】简书品牌重构
    【设计总结】
    【交互设计】
    【设计总结】
  • 原文地址:https://www.cnblogs.com/studyLog-share/p/5307293.html
Copyright © 2011-2022 走看看