看下面一段代码
代码Ajava
short a=4; int b=5; a += b;
代码Bcode
short a=4; int b=5; a =a+b;
能够告诉你:A编译成功,B编译失败。
这里没有为何,须要记住一点,+= 会对结果进行转型,A代码的结果是int,最后赋值给a的时候,会转为shot类型。
咱们看它的编译后的二进制代码:编译
4: iconst_4 //加载常量4 5: istore_1 //将常量4给第一个变量 6: iconst_5 //加载常量5 7: istore_2 //将常量5给第二个变量 8: iload_1 //以int类型加载第一个变量到栈 9: iload_2 //以int类型加载第二个变量到栈 10: iadd //弹出两个变量进行相加,结果入栈 11: i2s //弹出一个变量,将int转为short 12: istore_1 //将short类型的值给第一个变量
那么 -=,*=,/=呢?class