java中的自增问题介绍

 更新时间:2016年03月23日 15:49:42   投稿:jingxian  
下面小编就为大家带来一篇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。

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

相关文章

  • RedisTemplate.opsForHash()用法简介并举例说明

    RedisTemplate.opsForHash()用法简介并举例说明

    redistemplate.opsforhash是RedisTemplate模板类中的一个方法,用于获取操作哈希数据类型的接口,这篇文章主要给大家介绍了关于RedisTemplate.opsForHash()用法简介并举例说明的相关资料,需要的朋友可以参考下
    2024-06-06
  • Sax解析xml_动力节点Java学院整理

    Sax解析xml_动力节点Java学院整理

    这篇文章主要介绍了Sax解析xml,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java中常见的6种线程池示例详解

    java中常见的6种线程池示例详解

    这篇文章主要介绍了java中常见的6种线程池示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java中PropertyDescriptor的用法及说明

    Java中PropertyDescriptor的用法及说明

    这篇文章主要介绍了Java中PropertyDescriptor的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Struts2中接收表单数据的三种驱动方式

    Struts2中接收表单数据的三种驱动方式

    这篇文章简单给大家介绍了Struts2中接收表单数据的三种驱动方式,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-07-07
  • SpringBoot使用Logback进行日志记录的代码示例

    SpringBoot使用Logback进行日志记录的代码示例

    在开发Web应用程序时,日志记录是非常重要的一部分,在SpringBoot中,我们可以使用Logback进行日志记录,Logback是一款高性能、灵活的日志框架,它可以满足各种不同的日志需求,在本文中,我们介绍了如何在SpringBoot中使用Logback进行日志记录
    2023-06-06
  • java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)

    java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)

    打印日志的在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别、打印形式和日志的输出路径,下面看一个示例吧
    2014-01-01
  • Java 如何实现一个http服务器

    Java 如何实现一个http服务器

    这篇文章主要介绍了Java 如何实现一个http服务器,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • Java集合-HashMap

    Java集合-HashMap

    这篇文章主要介绍了Java集合HashMap,也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,下面来看看文章的具体内容吧,需要的小伙伴也可参考一下
    2022-01-01
  • java用户管理注册功能 含前后台代码

    java用户管理注册功能 含前后台代码

    这篇文章主要介绍了java用户管理注册功能,含前端和后台代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10

最新评论