java中的自增问题介绍

网友投稿 220 2023-07-20


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;   (等号http://左边的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 返回值赋http://值给变量区的i,此时i的值被重置成0。

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Hibernate实现批量添加数据的方法
下一篇:java实用验证码的实现代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~