经典面试题
来源:互联网 发布:杨修之死 知乎 编辑:程序博客网 时间:2024/05/16 18:31
今天,我看见一道题,特别有趣
public static void main(String[] args) {int a=4;System.out.print((a++)+(++a)+(a*10));}
求输出什么
最开始,我从左往右依次加上去发现结果是49,后来运行发现结果是70
后来想了一下,发现了一些关于操作符的运算细节
++a; //会先自增,然后返回值
a++; //会先返回值,然后自增
我们来分析下这个表达式
(a++)+(++a)+(a*10)
底层在计算表达式的时候,会将各个需要进行计算的表达式进行计算,然后再加起来
所以,先计算第一个表达式 a++
CPU计算值后放到了自己的缓存里,如果变量 a 里面有值,就需要进行擦除,然后放到变量a 所属的那块内存里
不过这里 ++ 运算符放到了变量 a 的后面,就先返回值,然后自增,所以第一个表达式返回了 4。不过它的值在返回后,底层将它的地址里的值擦除了,然后从CPU的缓存区里拿到计算好的值,再放到变量a所属的内存里。也就是说这里a已经变成5了,只是将自增前的结果返回了
然后我们分析第二个表达式 ++a
底层会先从 变量 a 的地址里找它的值,这里已经进行自增了,然后又进行自增,然后返回,这里a就变成了6
然后我们分析第三个表达式 a*10
这里a的值已经完成两次自增,赋值成6了,然后我们计算6*10,就得到了结果60
然后底层又计算整个表达式 4+6+60
从左往右依次相加,我们就得到了结果70
阅读全文
0 0
- IBM经典面试题
- 经典面试题
- java经典面试题
- 经典面试题
- Java经典面试题
- 经典C++面试题
- [转贴]经典面试题
- IBM经典面试题
- .Net经典面试题
- C++经典面试题
- IBM经典面试题
- C++经典面试题
- [转贴]经典面试题
- 经典java面试题
- java经典面试题
- java经典面试题
- 经典面试题
- 经典C++面试题
- 应用程序注销输入事件通道
- 线程的生命周期图
- 输入事件ANR原理分析
- caffe 训练过程源码层理解
- 接口----多实现
- 经典面试题
- OpenStack--网络环境实践(一)
- HTTP缓存机制
- Anaconda
- 利用rapidjson解析嵌套的json
- c++知识点----输出宽度填充以及运算符重载
- spring装配bean
- Java 接口的加深理解
- 数据结构之从有序的顺序表中删除所有其值重复的元素,使表中的元素均不相同