在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java中的自增问题介绍

2016-8-29 13:23| 发布者: zhangjf| 查看: 622| 评论: 0

摘要: 运行下面这段代码,其结果是什么呢? 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.print ...

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

  1. package com.test;
  2. public class Inc {
  3. public static void main(String[] args) {
  4. Inc inc = new Inc();
  5. int i = 0;
  6. inc.fermin(i);
  7. i = i++;
  8. System.out.println(i);
  9. }
  10. void fermin(int i) {
  11. i++;
  12. }
  13. }
复制代码

结果是: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。

以上这篇java中的自增问题介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持程序员之家。

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-7 01:46

Copyright 2015-2025 djqfx

返回顶部