i++和++i我们都知道,但是你知道i=i++;吗?

自上学时,老师就说i++是先赋值再加,而++i是先加再赋值,比如我们写个代码举下例子:

i++:

/*** 自增案例*/public static void testZiZeng(){int i = 1;int a = i++;System.out.println("a="+a);System.out.println("i="+i);}

其运行结果是:

a=1
i=2

++i:

public static void testZiZeng(){int i = 1;int a = ++i;System.out.println("a="+a);System.out.println("i="+i);}

其运行结果为:

a=2
i=2

运行结果解释:

i的值没的说,不管是++i还是i++,都是在原来值的基础上自身加1,这个很好理解,不好理解的是a的值:

  • 第一个案例中,a = i++;相当于是这样的,a = i,i++,那么a的值自然就是1了。

  • 第二个案例,a = ++i,相当于i先++(此时i从1变成了2),然后在将i的值赋值个a,那么a自然而然也就成2了。

这一部分理解了,我们接着看下一个i=i++;

某天,给学生们写了一段代码:

public static void testZiZeng(){int count = 0;for(int i = 0;i<10;i++){count = count++;}System.out.println("count="+count);}

代码写完之后,问:“谁知道count的值是多少?”

王同学和刘同学在简单计算之后争相往起站:“老师,是10”,其他人也附和“没错,是10”,“对,就是10”……大家都陆陆续续的说出了自己心中的正确答案。

“小点声,你们说的是错的!别这么大声……”看着大家这么积极的回答,我不忍心的劝说道。

于是大家都用惊愕的眼神看着我,眼神里仿佛写着,十万个为什么。

其实正确答案是:

(点击空白处查看答案)

count=0

接下来我们分析一下为什么?

点点下面的小卡片就是对我莫大的支持,谢过啦~

count++是一个表达式,是有返回值的,它的返回值就是count自加前的值,Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。

用代码解释为这样的:

int temp = count; //先把i变量的值10保存到临时变量中
count = count+1; // i变量的值加1操作
count = temp; //再把临时变量中的值赋值给i

程序第一次循环时的详细处理步骤如下:

  • JVM把count值(其值是0)拷贝到临时变量区。

  • count值加1,这时候count的值是1。

  • 返回临时变量区的值,注意这个值是0,没修改过。

  • 返回值赋值给count,此时count值被重置成0。

知道为什么了吧!

老师,我没有学过事务……同学你过来,你看老师手里拿的是什么?

2020-06-11

sql server高级查询,看这篇文章就够了

2020-06-09

Linux基础知识之【简介与安装】

2020-06-08

教你2分钟永久激活win10系统手慢无……

2020-06-03

3分钟内看完这,bootstraptable表格控件,受益匪浅!

2020-06-02

觉得好看,点击这里

你知道i=i++;的含义吗?原理其实没有你想的那么简单相关推荐

  1. 计算机故障的分析原理,蓝屏含义、原理分析、处理方法 电脑计算机故障系统安全...

    目录 1含义2原理分析3处理方法4代码含义和解决 5原因分析6预防电脑蓝屏的 含义 引蓝屏解释 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x ...

  2. transforms.Compose,transforms.ToTensor(),transforms.Normalize()的含义与原理

    transforms.Compose,transforms.ToTensor(),transforms.Normalize()的含义与原理 1.问题描述 问题来源于pytorch实现CNN神经网络的示 ...

  3. pwm占空比的c语言编程详解,盘点占空比、PWM、GPIO三者含义及原理分析

    (1)占空比(Duty Cycle)有如下含义: 在一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲总周期的比值.例如:脉冲宽度1μs,信号周期4μs的脉冲序列,占空比为0.25. 即在一段连续 ...

  4. !=EOF的含义和原理

    在ACM中经常遇见过这种情况,今天就来详细总结一下.(以while (scanf("%d", &a) != EOF)为例) 1.EOF是一个宏,许多函数(包括scanf)在 ...

  5. 深度学习——RNN原理与TensorFlow2下的IMDB简单实践

    在深度学习中,RNN是处理序列数据的有效方法之一,也是深度的一种很好的体现,本文将简单介绍RNN的工作方式,以及针对IMDB数据集的简单实践 RNN简介 RNN(Recurrent Neural Ne ...

  6. PID算法终于弄明白原理了,原来就这么简单

    看起来PID高大尚,实则我们都是被他的外表所震撼住了.先被别人唬住,后被公式唬住,由于大多数人高数一点都不会或者遗忘,所以再一看公式,简直吓死.了解了很浅的原理后,结果公式看不懂,不懂含义,所以最终没 ...

  7. Solr的工作原理(最直白的解释,简单易懂)懂?

    Solr 什么是Solr Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的. 使用Solr构建的应用程序非常复杂 ...

  8. 图解原理!秒懂ElasticSearch搜索如此简单

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我的搜索 ...

  9. 5分钟了解Docker原理(2),最简单的cgroups介绍!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 很多接触Docker的同学,都接触过cgroup这个名词. ...

最新文章

  1. mysql memcached 使用场景_memcache的应用场景?
  2. docker的学习总结
  3. Apache Hive on Apache Tez
  4. android开源2016_开源的黄金时代,2016年的预测以及更多新闻
  5. 一年中最后一个月的最后一天说说_一年最后一天的心情说说
  6. 计算机视觉中常见图像扰动方法的Pytorch实现
  7. 要把AI建在赤道上的华为,为何用全栈全场景方案打响第一枪
  8. DBCP,C3P0,Proxool,BoneCP参数介绍[摘]
  9. 计算机网络与综合布线系统设计,浅谈计算机网络综合布线系统设计
  10. 浅谈进销存管理-【采购篇】
  11. python(turtle库)画七巧板
  12. Python使用Hprose
  13. OPENSTACK超售比例之VCPU
  14. 台式电脑计算机怎么打不开怎么回事,为什么电脑自带的软件打不开怎么办
  15. app开发都有哪些基本的开发语言选择?
  16. Vue视频播放组件(Video)
  17. it行业se是_IT行业常见职位英文缩写
  18. 昆明:推进智慧交通 缓解交通拥堵
  19. STM32-使用IIC接线的OLED显示屏
  20. Linux中使用mvn命令(使用Maven:-bash:mvn:command not fonud)随笔

热门文章

  1. 网络原理题+复习资料
  2. oracle sql execute elapsed time,SQL ordered by Elapsed Time 脚本
  3. 应用服务器——tomcat架构分析
  4. GBK、GB2312、GB18030
  5. Codeforces Round #674 (Div. 3) F. Number of Subsequences 简单计数dp
  6. cf1491C. Pekora and Trampoline
  7. Moving On Gym - 102222F
  8. 牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解
  9. [多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)
  10. 模板:BSGS(数论)