关于a++和++a

2023-05-16

                                                                                                                           ——作者:Huya天涯过客
      写此博文的初衷是想将自己的心得体会与Java初学者进行分享,已在该领域纵横多年的技术大佬请自行跳过。
      刚学到数据类型以及变量赋值的同学们肯定会接触到自增运算符这个知识点,绝对有很多人会被a++和++a这两个符号弄得一脸懵逼。。。。本人刚开始也是头大,老师随便换一些花样就被搞懵圈了。于是自己研究了半个小时,才发现其中的“秘密”,特此将自己的总结分享给大家。当然每个人的思维方式和逻辑习惯不一样,我的方法也没法保证能让所有人都易于接受,请大家多多包涵。
      大家都知道a++和++a的含义都是一样的,都是在a的基础上再加上1。例如
在这里插入图片描述
在这里插入图片描述
      这两道题是自加一题目中最简单的。a初始化值为1,自加1后,a变为2,输出a的值,都为2。接下来我们看这几个例子:
在这里插入图片描述
       以上六道题,如果大家能全部写出正确答案,可以说自增运算符基本上没什么问题了(当然编译的时候得把别的五道题给注释掉,否则会因为变量a多次被声明而编译报错)。首先,计算机读取源代码是从上到下一条一条来读的。根据这样的原则,我们把上面六道题依次过一遍。

第一题:声明一个变量a,将1的值赋给a,那么a的值为1。下一步,将a++的值赋给等号左边的变量a,我们就得知道a++在运行的时候是怎么运行的。a++在运行的时候,首先先把a的值备份一份并直接赋予等号左边的变量a,此时,左边的变量a的值依然是1,而等号右边的a把备份值赋予出去后,自己在原来的数值上自加1,就为2。第三步,输出变量a的值。关键就是你怎么理解输出语句括号里的变量代表的是哪一个a。如果输出语句上面有一个赋值的语句,那么一定是等号左边的a。而等号左边的a的值为1,所以,输出的值就是1。

第二题:声明一个变量a,将1的值赋给a,那么a的值为1。下一步,将++a的值赋给等号左边的变量a,我们就得知道++a在运行的时候是怎么运行的。++a在运行的时候,首先先自加1,然后把加1之后的值作为备份赋给左边的变量a,也就是2。**综合第一题和这一题,可以发现a++和++a的区别在于备份和自加1的顺序不同。**第三步,输出等号左边的变量a的值,为2。

第三题:声明一个变量a,将1的值赋给a,那么a的值为1。下一步,等号右边的变量a的值先备份给等号左边的变量a,那么等号左边的变量a的值为1,右边的变量a自加1,为2。第三步,输出a++的值。这个时候,很多人会误以为输出的是a++的值,为2。也有人会认为,a不是自加1变为2了么,输出语句里又有一个a++,那不就是3了么。犯这个错误的原因在于不清楚计算机是如何执行程序的。刚才已经说了,计算机是从上到下一条一条执行的,每一句,每个词都不会放过。那么这道题执行到输出语句括号里的a++的时候,会在获取a的变量值的基础上再执行一次++。那么获取的变量值是多少呢?刚才说过,如果输出语句上面有一个赋值的语句,那么一定是等号左边的a,而不是等号右边的a,因此,获取的变量值为1,那么这个时候括号里实际上是1++,而不是++1,既然是1++,当然按照法则,先备份1的值给变量k(这里的k是虚拟存在的,k = 1++,实际上我们完全可以把输出语句括号里的内容当成k),然后自己变成2,因此,输出到dos命令窗口的值为1。如果不信的话,可以自己写代码去测试。

第四题:声明一个变量a,将1的值赋给a,那么a的值为1。下一步,等号右边的变量a的值先备份给等号左边的变量a,那么等号左边的变量a的值为1,右边的变量a自加1,为2。第三步,输出++a的值。计算机执行到这里,当然要获取变量a的值,上面已经说过,获取的是等号左边的变量a,值是1。于是,输出语句括号里实际上是++1,k=++1,那么按照法则,++1是先自加1,然后把值备份给k,输出的为2。

第五题:声明一个变量a,将1的值赋给a,那么a的值为1。下一步,等号右边的变量a先自加1,为2,再将值备份给左边的变量a,那么等号左边的变量a=2。第三步,执行输出语句到括号中的++a,首先先获取a的值,为等号左边的变量a=2。这个时候可以看成输出语句括号的内容为k=++2,按照法则,2先自加1,再将值备份给k,k为3,因此,输出的值是3。

第六题:声明一个变量a,将1的值赋给a,那么a的值为1。下一步,等号右边的变量a先自加1,为2,再将值备份给左边的变量a,那么等号左边的变量a=2。第三步,执行输出语句到括号中的a++,首先先获取a的值,为等号左边的变量a=2。这个时候可以看成输出语句括号中的内容为k=2++,按照法则,2先把值备份给k,自己再变成3,但是输出的k依然是2。

         还有要记住的一点是,有的时候语句输出的变量值,不一定会以这个值带到后面的语句去。见下图:
在这里插入图片描述
       在这里,第一个输出值为9基本没有异议。那么第二个输出语句输出的值是多少呢?答案是11。因为我们看到第一个输出语句括号里是变量num,num的值取的是上面等号左边的变量,值为9,因此这个num会带到下面的语句中,使得第四行等号左边的值为10,再输出++num,k=++num,k=11。
再看这个例子:
在这里插入图片描述
       首先,num的声明值为9,num++先把9作为备份值赋予等号左边的变量num,自己再加1,成为10,进入到输出语句,需要输出num++,num需要获取等号左边num值,为9,因此,k=9++,9作为备份值赋予k,因此输出的是9,但是,括号里的num++也得计算,因此,这个计算后得出的数据将会重新作为num的值代入到后续的程序当中,所以,第四行等号右边的num++的num值就为10。++10先自加1变为11,再赋予等号左边的num值中,num变为11,进入最后一行的输出语句,括号里为++num,获取等号左边的num值11,k=++11,11先自加1变为12,赋予给k,输出12。也就是说,输出值其实不一定是括号里的变量值,输出值其实是一个虚拟的变量k的值,真正代入到后续程序的值为执行过后的值。例如println(num),带入到后面的值就是num;println(++num),带入到后面的值就是num自加1后的值。
最后,我再换一下题型:
在这里插入图片描述
       这两段代码输出语句里的num和++num是想获取备份值的,但是上面说过,如果要获取值也是获取等号左边的值,但是等号左边只有a和b,因此,num该是多大就多大。第一个输出语句中,num为10,输出并代入到下一语句中,++10先自加1变为11,赋予给等号左边的b。这时候num为11,进入到输出语句中, k=++11,11自加1变为12赋予k并输出。因此,答案为10,12。
       如果大家能够搞懂这篇文章,相信以后遇到所有的自增运算符的题目都可以手到擒来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于a++和++a 的相关文章

随机推荐

  • Action-Net|UCF101数据集上训练测试数据load过程

    Action Net CVPR2021 论文中给出了三个数据集的测试精度 xff0c sth sthV2 jester egogesture 其数据加载方式利用了作者构造的 pkl文件 要想要在UCF101 xff0c HMDB51上训练测
  • pycharm debug|新手入门

    文章目录 前言一 debug常识二 debug时遇到的问题及解决办法三 程序中遇到某些特殊情况应该如何debug 前言 分条整理debug时的注意事项 xff0c debug时遇到的问题及解决办法 xff0c 程序中遇到某些特殊情况应该如何
  • 使用shell命令校验Android apk的签名信息、校验apk是否使用v1v2v3v4签名

    文章目录 前言1 查看apk文件的签名类型的shell命令2 自动校验签名并输出的完整脚本2 1 命令脚本2 2 命令脚本更新版2 0 3 本文中使用到的shell命令小结3 1 shell 查看apk的签名信息3 2 shell 字符串包
  • C++【类与对象】——静态成员函数及静态成员变量

    类与对象 静态成员函数及静态成员变量范例编程 xff08 视频113 xff09 范例要求 xff1a 创建任意类 xff0c 要求 xff1a 其中包含静态成员函数 xff0c 静态成员变量 xff1b 静态变量初始化静态函数用两种方法进
  • C++【引用】——串讲

    引用 串讲 xff08 视频89 94 xff09 Note i 视频为黑马程序员C 43 43 视频 xff0c 系列文章为视频听课笔记 ii 引用不仅包含定义及简单应用 xff0c 在类与对象 中也有涉及 xff1b iii 难度指数
  • C++【类与对象】——空指针访问成员函数+const修饰成员函数

    文章目录 一 空指针二 const修饰成员函数 xff08 常函数 xff09 1 code格式2 作用 三 常对象1 code格式2 作用3 注意事项 Note i 视频为黑马程序员C 43 43 视频 xff0c 系列文章为视频听课笔记
  • C++【类与对象】——友元

    文章目录 一 全局函数作友元1 友元2 code格式3 作用 二 友元类1 code格式2 作用3 拓展 三 成员函数作友元1 code格式2 作用 总结 Note i 视频为 黑马程序员C 43 43 视频 xff08 118 120 x
  • C++【类与对象】——运算符重载

    文章目录 一 运算符重载1 定义 二 加号运算符重载1 code格式 xff08 1 xff09 通过成员函数实现加号运算符重载 xff08 2 xff09 通过全局函数实现加号运算符重载 2 作用3 拓展 xff08 1 xff09 运算
  • C++【类与对象】——继承

    文章目录 一 基本语法1 code格式2 作用 二 继承方式1 图解 xff08 核心 xff09 2 总结 三 继承中的对象模型1 总结 四 构造和析构顺序1 引入2 总结 五 同名成员访问1 引入2 同名成员属性访问方式3 同名成员函数
  • 【ROS基础指令】ROS基础指令、基本知识快速查询

    ROS学习 ROS相关指令积累1 ros基础指令2 ros常用工具指令关于rviz关于rqt关于gazebo关于launch关于run关于PX4 如何自定义数据类型仿真 ROS相关指令积累 1 ros基础指令 功能指令初始化创建工作空间ca
  • 【cartographer_slam源码阅读】4-6激光雷达数据的转换

    HandleLaserScanMessage 函数 作用 xff1a 利用 ToPointCloudWithIntensities函数 将ros中的数据转换为carto中定义的数据类型 xff1b 传入 HandleLaserScan 函数
  • prometheus二次开发之HTTP api(一)

    Prometheus在 api v1的路径下开放了HTTP接口 xff0c 用户可以通过这些接口进行二次开发 这篇笔记挑选了此次监控平台可能会用到的接口进行解析 1 请求 amp 响应格式 1 JSON响应格式 以JSON格式进行响应 若A
  • prometheus二次开发之HTTP api(二)

    接以上prometheus二次开发之HTTP api xff08 一 xff09 xff1a https blog csdn net weixin 44723434 article details 104282636 最近做监控方案发现可能
  • 从 JavaScript 中的数组中删除空对象

    从数组中删除空对象 xff1a 使用 Array filter 方法遍历数组 将每个对象传递给 Object keys 方法并检查键的长度是否不等于 0 filter 方法将返回一个不包含空对象的新数组 span class token k
  • 耦合,紧耦合,松耦合,解耦

    一 耦合 耦合是两个或多个模块之间的相互关联 在软件工程中 xff0c 两个模块之间的耦合度越高 xff0c 维护成本越高 因此 xff0c 在系统架构的设计过程中 xff0c 应减少各个模块之间的耦合度 xff0c 以提高应用的可维护性
  • 实习日记之SNMPV3不难

    SNMPv3 的连接 snmpwalk v 3 u a a MD5 A Qaz1234567 x AES X Qaz1234567 l authPriv 10 0 31 132 1 3 6 1 2 1 6 前面 v 3 xff0c 意思是在
  • 一些控制算法学习

    pid LQR xff08 LQG xff09 xff0c 鲁棒控制 xff08 H无穷 xff09 xff0c 自适应控制 xff08 包含滑膜 xff0c 反步法 xff0c mrac模型参考 xff0c L1自适应 xff09 xff
  • Qt和其它GUI库的对比

    Windows 下的 GUI 库 Windows 下的 GUI 解决方案比较多 xff1a 基于 C 43 43 的有 Qt MFC WTL wxWidgets DirectUI Htmlayout xff1b 基于 C 的有 WinFor
  • stm32初学 Keil debug断点调试的步骤

    网上没搜到 xff0c 自己简单写一个 xff0c 希望对大家有用 1 在debug模式下 xff0c 将需要观察的变量选中 xff0c 右键Add to添加到 Watch 1中 原本Watch应该位置在右下角见图二 xff0c 是我拖到了
  • 关于a++和++a

    作者 xff1a Huya天涯过客 写此博文的初衷是想将自己的心得体会与Java初学者进行分享 xff0c 已在该领域纵横多年的技术大佬请自行跳过 刚学到数据类型以及变量赋值的同学们肯定会接触到自增运算符这个知识点 xff0c 绝对有很多人