Java中的復合運算符,比如 += 、-= 等,一般來說,a = a + b 與 a += b 是等價的,但實際上從嚴格意義上來說,這二者之間並不等價,還是有一定區別的。
比如:
public class TestCompositeOperator {
public static void main(String[] args) {
short a = 5;
short b = 10;
a = a + b; //此處會報錯
System.out.println(a);
}
}
因為在Java中,凡是小於int的整型在參與運算的時候,都會被當做int類型來處理,即a = a + b;此處的右邊的a和b在參與運算的過程中,a和b都被當成int類型來處理,運算結果當然是int類型,要把int類型賦給short類型,必須強制轉換,否則就會報錯;
但是:
public class TestCompositeOperator {
public static void main(String[] args) {
short a = 5;
short b = 10;
a += b; //此處正確
System.out.println(a);
}
}
因為在Java中,像+=這樣的復合運算符,實際上包含了強制類型轉換,即以上代碼a += b;是和 a = (short)(a + b);等價。
所以在實際使用中,一定要牢記基本的運算准則,否則就很容易出一些莫名其妙的錯誤。