在同一语句中为数组分配多个值

P K*_*P K 5 java arrays variable-assignment

我有一个java代码片段如下:

int arr[] = new int[5];
int index = 0;
arr[index] = index = 3;

System.out.println("arr[0] = " + arr[0]);
System.out.println("arr[3] = " + arr[3]);
Run Code Online (Sandbox Code Playgroud)

输出是:

arr[0] = 3
arr[3] = 0
Run Code Online (Sandbox Code Playgroud)

第3行究竟发生了什么?

das*_*ght 5

Java语言规范:

15.7 Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右.

在这种情况下,arr[index]首先评估,产生对元素零的引用.这是因为index还是0.现在index = 3进行评估,并3存储在索引中.现在第一个分配已准备好完成,因此3分配给元素零.

Java语言设计者建议避免依赖此规则以确保清晰度,确保表达式只有一个副作用.然而,你的表达有两个副作用,其中一个依赖于另一个的完成.

建议代码不要严格依赖于此规范.当每个表达式最多包含一个副作用时,代码通常更清晰,作为其最外层的操作,并且当代码不依赖于由于从左到右的表达式评估而出现的确切异常时.