日期:2014-05-20  浏览次数:20671 次

类型转换问题
为什么
    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 //存入局部变量区