java中的自增问题介绍
时间:2021-04-27 09:07:54|栏目: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。
上一篇:解决springboot上传图片后无法立即访问需重启的问题
栏 目:JAVA代码
本文标题:java中的自增问题介绍
本文地址:http://www.codeinn.net/misctech/109641.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




