Java中使用a=a+b与a+=b的区别

说明

最近要开始接受学校的岗前培训,老师出了一些基础题。
先上题目
题目:此程序有什么问题

题目:此程序有什么问题
咋一看题目没啥问题,实际上这个代码可以运行,至于为什么可以运行,篇幅原因就不做多的解释了,重点不在这里。
在我慢慢摸索我无意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

本人是第一次写博客,可能在内容与排版上会引起各位看客的不适又或是不爽,各位可以骂我喷我,但我也希望各位能够指出我种种不足。求求各位啦

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值