类型转换问题
为什么
short s1 = 1; s1 = s1 + 1; 需要强制转换类型
short s1 = 1; s1 += 1;可以正确编译
------解决方案--------------------因为第一句1是int
第二句+= 有重载,是内部实现的
------解决方案--------------------s1 += 1;是一种简写形式,他相当于的是 s1 = (short)(s1 + 1);
它们都会被编译器编译成如下指令:
iload_1 //局部变量入栈,这里就是s1
iconst_1 //常量1入栈
iadd
i2s //int转成short,实际上已经被隐式转换了
istore_1 //存入局部变量区