i++底层问题
来源:互联网 发布:爱易编程工具箱 编辑:程序博客网 时间:2024/06/11 07:47
大家都知道i++在做运算的时候,是先赋值再自加1,但底层究竟是怎样实现的呢?下面,就三个例子来说明一下i++的底层实现原理。
第一个例子:
程序输出为10。因为i++在作计算的时候要引入一个临时的变量,底层是这样实现的:
先把i的值赋给一个临时变量_temp,然后再作自加1的操作,最后又把临时变量_temp的值赋给了i,看到这里有点迷糊了吧。如果换一种写法,int j = i++,自己就能够看懂了,底层也就是这样实现的:
所以,无论是哪种情况,最后打印出的结果都是10。第二个例子:
程序输出结果为1。这个题参考第一个例子,可以这么理解:
假设有一个变量m接收第一个i++的计算结果,那么m的值一定是0,而底层i的值变成了1
再假设又有一个变量n接收第二个i++的计算结果,由于底层i的值变成了1,所以n的值是1,
那么,计算过程就变成了m+n,等于1。
第三个例子:
程序打印出j的值是0。无论什么时候,只要是有finally语句块,就一定会执行的,所以底层i的值是2。
假设有一个变量s接收try语句块中i++的值,s为0,return s,所以j的值是0。
这道题可以改一下,finally语句块中的语句改为return i++,结果是什么。
结果j的值是1,因为最后的返回结果不是try语句块中的结果,而是finally语句块中结果。
执行try语句块中的语句,i的值变成了1,所以finally语句块中的语句结果是1,底层i的值是2。
再改一下,finally语句块中的语句为return ++i,结果是什么。
结果j的值是2,因为最后finally语句块中的语句是i自加1之后,再return的。
所以finally语句块中返回的是2,底层i的值是2。
0 0
- i++底层问题
- java I/O底层
- 底层I/O的操作过程
- ++i和i++ 以及其底层实现
- java web底层问题
- java底层问题
- 关于i++的底层实现原理
- 底层操作的几个I/O函数
- 底层文件I/O操作---open()函数
- [Linux]--底层文件 I/O 操作
- 【程序设计】i++与++i的底层汇编分析
- 【c++】语言基础:++i & i++ 的底层区别
- i/o——Java I/O底层
- i++*i++的问题
- i++和++i问题
- 关于 ++i ,i++ 问题
- i++ i-- 问题小记
- i=i++问题
- Hbase集群部署计划---安装系列四
- 803D
- 多线程同步问题-练习题2-笔记整理
- 修改文件的权限
- 爬虫入门(一)
- i++底层问题
- linux mysql导入数据库
- 单例设计模式
- 函数、数组和指针的形参
- 有关深度学习领域的几点想法
- Mybatis实现数据的增删改查(CRUD)
- 多线程同步问题-练习题3-笔记整理
- SpringBoot非官方教程 | 第十五篇:Springboot整合RabbitMQ
- AngularJS 组件化