先来看下面的 代码:
public class Test
{
public static void main(String[] args)
{
short i ;
i = i + 1; //编译错误
i += 1; //正确
byte j = 1; //正确
byte k = 2;
byte l = j + k; //错误
}
}
1、关于 i = i + 1: i + 1是int型,赋值给short 型变量需要做显示转换。
2、+= 、-= 属于复合赋值运算符(Compound Assignment Operator),他们是一种赋值运算符,虽然他们有算数的功能,但应该属于赋值运算符的范畴,而不属于算术运算符一类。
Java规定:复合赋值运算符中的转换都要编译器负责。
这就是为什么使用 += 、-=不需要显示转换的原因。
3、算术运算符(Arithmetic Operator)
Java中,所有整数的算术运算符都会产生int型的结果(除非有long参与其中)。因此
byte l = j + k;
虽然 j 、 k 都是byte型的,但根据上面“所有整数的算术运算都会产生int型的结果“的规则, j + k 结果是int型。这样将int赋值给byte 就需要强制转换。
david.wang 2011-03-09