【问题标题】:Assigning multiple values to an array in same statement在同一语句中为数组分配多个值
【发布时间】:2014-12-28 17:09:25
【问题描述】:
我下面有一个java代码sn-p:
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 行到底发生了什么?
【问题讨论】:
标签:
java
arrays
variable-assignment
【解决方案1】:
Java 语言规范:
15.7 Java 编程语言保证运算符的操作数看起来是按特定的计算顺序计算的,即从左到右。
在这种情况下,首先评估arr[index],产生对元素零的引用。这是因为index 仍然是0。现在index = 3 得到评估,3 存储在索引中。现在第一个分配已经准备好完成,所以3 被分配给元素零。
为了清晰起见,Java 语言设计者建议避免依赖此规则,确保表达式只有一个副作用。但是,您的表达式有两个副作用,其中一个依赖于另一个的完成。
建议代码不要过度依赖本规范。当每个表达式最多包含一个副作用时,代码通常会更清晰,作为它的最外层操作,并且当代码不完全依赖于表达式从左到右求值的结果出现的异常时。 p>