java关于a+=b与a=a+b的区别

今天看到一个题目a += b与 a=a+b的区别

看下面一段代码
代码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

相关文章
相关标签/搜索