從左向右的計算順序:
例:
package deep;
import java.util.Arrays;
public class Sequence {
public static void main(String[] args) {
int a[] = new int[] { 0, 0, 0, 0, 0 };
int j = 3;
a[j] = j = 4;
System.out.println("j=" + j);
System.out.println(Arrays.toString(a));
}
}
運行結果:
j=4
[0, 0, 0, 4, 0]
首先確定左側操作數,j的值爲3,也就是a[3],這相當於:
a[3]=j=4;
複合運算符:
我們知道,符合運算符可以自動將右側運算的結果類型轉換爲左側操作數的類型。例如如下的代碼:
byte b=1;
b=b+1;//錯誤
b+=1;//正確
因爲常量1爲int類型,所以右側的結果是int類型,不能賦值給一個byte類型的變量,但是使用複合運算符(+=)是可以的,第3條語句相當於:
b=(byte)(b+1);
除此之外,複合運算符也有上述的性質,即遵循操作數從左向右計算的原則,也就是說,在執行賦值操作之前,首先會確定左側的操作數。
例:
package deep;
import java.util.Arrays;
public class Order {
public static void main(String[] args) {
int a = 10;
a += ++a;
System.out.println("a=" + a);
int[] array = new int[] { 8, 9, 10 };
int b = 1;
array[b] *= b = 2;
System.out.println("b=" + b);
System.out.println(Arrays.toString(array));
}
}
運行結果:
a=21
b=2
[8, 18, 10]
總之,運算前會將左側的操作數保存起來,左側的操作數不會受到其右側表達式的影響而造成改變。