当前位置: 首页 > news >正文

【转】Java 中的 i = i++

转载:http://soft.chinabyte.com/database/279/11431779.shtml

关键字:Java
 

  学习过一门计算机语言的人一定知道j=i++的运算结果,整个表达式的值为i,而i的值变为i+1;那么i=i++又是一个什么情况呢?下面分别用java 和 c 两种语言来做个测试:

  JAVA:

  public class test

  {

    public static void main(String args[])

    {

      inti,j;

      i=0;

      for(j=0;j<5;j++)

      {

        i=i++;

        System.out.println("i="+i);

      }

    }

  }

  C:

  #include

  main()

  {

    inti,j;

    i=0;

    for(j=0;j<5;j++)

    {

      i=i++;

      printf("i=%d\n",i);

    }

  }

  你也许会问,这么简单的程序会有什么问题呢?是的,如果不相信的话,你可以运行一下这两个程序,得到的结果非常让人震惊。

  第一个JAVA程序得出的结果如下:

  i=0

  i=0

  i=0

  i=0

  i=0

  而第二个C程序得出的结果如下:

  i=1

  i=2

  i=3

  i=4

  i=5

  同样都是i=i++,为什么得出的结果会有这么大的差异呢?原来是在编译器上出了问题,java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况:

  i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。

  明白了上面的问题,让我们接下来看看i=i++的情况:

  所以这样最后一次循环内的结果仍旧是i(即0)。

  而C语言中的i=i++就只是完成i++的内容,所以结论会不同。这种情况说明java和c的处理语法的机制不同,如果在程序中只输入i++就不会出现这个方面的问题,所以大家在以后的程序中如果使用到i=i++的时候要格外小心,一般只需要用i++就不会有问题了。

转载于:https://www.cnblogs.com/wumrwds/p/5296418.html

相关文章:

  • 在我lenovo上装windows10
  • Shell编程
  • 构建自己的PHP框架--创建组件的机制
  • 闲扯 『 document.write 』
  • 【vSphere故障案例】案例九:ESXi主机HA未配置错误
  • 在Mac上关于tomcat服务器的安装、配置、启动、部署web详细流程
  • git分享(二)git checkout
  • Android源码大放送之material design类型
  • 国内收益最高的聚合平台--KeyMob移动广告聚合平台
  • SQL 存储过程返回值
  • 利用excel办公软件快速拼凑sql语句
  • 如何利用又拍云玩转live photo,没有6S也能玩
  • PHP异常处理
  • Java之IO流总结
  • Java NIO系列教程(三) Buffer
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Laravel5.4 Queues队列学习
  • Node项目之评分系统(二)- 数据库设计
  • php的插入排序,通过双层for循环
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring Cloud中负载均衡器概览
  • ubuntu 下nginx安装 并支持https协议
  • vue自定义指令实现v-tap插件
  • Wamp集成环境 添加PHP的新版本
  • yii2中session跨域名的问题
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 电商搜索引擎的架构设计和性能优化
  • 番外篇1:在Windows环境下安装JDK
  • 基于 Babel 的 npm 包最小化设置
  • 基于axios的vue插件,让http请求更简单
  • 前端临床手札——文件上传
  • 浅谈Golang中select的用法
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链将重新定义世界
  • 如何胜任知名企业的商业数据分析师?
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 与 ConTeXt MkIV 官方文档的接驳
  • Python 之网络式编程
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #define、const、typedef的差别
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (30)数组元素和与数字和的绝对差
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Java)【深基9.例1】选举学生会
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八)Spring源码解析:Spring MVC
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (利用IDEA+Maven)定制属于自己的jar包
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析