说明
最近要开始接受学校的岗前培训,老师出了一些基础题。
先上题目

题目:此程序有什么问题
咋一看题目没啥问题,实际上这个代码可以运行,至于为什么可以运行,篇幅原因就不做多的解释了,重点不在这里。
在我慢慢摸索我无意s+=1写成了s=s+1,他却报错了

明明s=s+1与s+=1咋一看没啥区别,为什么会报错呢?
从字节码文件解析开始下手
实际上对于这种基本的问题或许就得从底层下手,就比如JVM、字节码文件。
我们这次对字节码文件进行解析查看,这里我用到了idea上的jclasslib插件,安装的步骤就不做讲解了,CSDN上个各个大佬都已经写出了详细的安装教程,我就不必掺和,反正也讲的没那些大佬细(笑)
先上图

这是s+=1时的字节码部分内容
这部分知识设计到JVM指令,我就简单介绍其中我认为十分重点的i2s,我将其称之为int two(to) short
那这就是int转short的操作,相当于在s=s+1上添加了一步(short)的操作,即

我们都知道,对于赋值运算都是先把等号右边计算清楚再赋值给等号左边,那么+=实际上先对我们的结果进行转换再赋值给等号左边的变量。
结论
直接使用a=a+b不会达到对结果的自动转换,那么使用a+=b的话Java会自动为结果转换类型,进而省去了我们还要手动强制转换的步骤。
ps
本人是第一次写博客,可能在内容与排版上会引起各位看客的不适又或是不爽,各位可以骂我喷我,但我也希望各位能够指出我种种不足。求求各位啦
本文通过解析Java字节码文件,对比分析了s=s+1与s+=1的区别,揭示了+=运算符如何自动处理类型转换的过程。
607

被折叠的 条评论
为什么被折叠?



