我有一个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]);
输出是:
arr[0] = 3
arr[3] = 0
第3行究竟发生了什么?
答案 0 :(得分:5)
Java语言规范:
15.7 Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。
在这种情况下,首先评估arr[index]
,产生对元素零的引用。这是因为index
仍为0
。现在index = 3
得到评估,3
存储在索引中。现在第一个分配已准备好完成,因此3
被分配给元素零。
Java语言设计人员建议避免依赖此规则以确保清晰度,确保表达式只有一个副作用。但是,你的表达有两个副作用,其中一个依赖于另一个的完成。
建议代码不要严格依赖此规范。当每个表达式最多包含一个副作用时,代码通常更清晰,作为其最外层的操作,并且当代码不依赖于由于从左到右的表达式评估而确切地出现哪个异常时。