多语言展示
当前在线:606今日阅读:4今日分享:26

java运算符a=a+b与a+=b区别——demo例子

最近开始学习java,看到一个问题,就是byte b;b=b+10;和b+=10;执行操作的时候,b=b+10会报错,而b+=10能够编译通过,也不知道具体原因是什么?就通过百度参考了一些资料,并总结下面。
工具/原料
1

jkd

2

反编译工具

方法/步骤
1

首先创建一个java文件,通过记事本编写简单的demo代码,本人编写了一个Test文件,然后另存为.java文件。参考下图,

2

现在我们通过编译来比较b=b+10;和b+=10;的区别,第一步我们把b+=10;进行注释,参考下图。

3

然后在cmd命令行进行编译(环境配置时候classpath设置当前路径),通过编译我们可以发现b=b+10会报错误,原因是b是byte类型,而10是int类型,int类型不能隐式转换为byte。参考下面结果:

4

将第一步我们把b=b+10进行注释,然后进行编译,执行,我们会发现b+=10;是可以通过的。具体参考下图

5

那么,为什么byte b=1;b+=10;会编译通过呢,首先我们通过反编译工具查看编译后的class文件。具体如下:

6

通过对class文件的了解可以知道,这段代码byte b=1;b+=10;System.out.println(b);被编译成了int i = 1;i = (byte)(i + 10);System.out.println(i);现在我们可以很清楚的了解到为什么byte b=1;b+=10;b=b+10的区别,首先编译上,b+=10是可以编译通过的,编译后的文件也是做过处理的。有兴趣的可以测试下下面这个代码,你会更加了解byte和int的关系。

注意事项
1

本例是以byte b=1;b+=10;b=b+10;多使用反编译工具了解隐式转换

2

谢谢阅读!

推荐信息