Java中赋值运算符的解释
我有这个,它给出:Java中赋值运算符的解释,java,Java,我有这个,它给出: public class Conversions { public static void main(String[] args) { int index = 3; int[] arr = new int[] { 10, 20, 30, 40}; arr[index] = index = 2; //(1)
public class Conversions {
public static void main(String[] args) {
int index = 3;
int[] arr = new int[] { 10, 20, 30, 40};
arr[index] = index = 2; //(1)
System.out.println("" + arr[3] + " " + arr[2]);
}
}
我希望它能给我带来帮助
2 30
在(1)处,为什么赋值中的索引值没有更改为2(并保持为3) Java语言规范(JLS)的定义所隐含的=
意味着您的表达式可以表示为,因此:
但是,国家:
Java编程语言保证运算符的操作数按特定的求值顺序求值,即从左到右
因此,arr[index]
在index=2
is之前进行评估,即在更新index
的值之前
显然,您不应该编写依赖于这一事实的代码,因为它依赖于几乎没有读者理解的规则 = 如果左侧操作数是数组访问表达式(§15.13), 可能包含在一对或多对括号中,然后:
- 首先,计算左侧操作数数组访问表达式的数组引用子表达式。如果此评估完成 突然,则赋值表达式为 同样的理由;左操作数数组的索引子表达式 访问表达式)和右侧操作数不进行求值和 没有分配发生
- 否则,将计算左侧操作数数组访问表达式的索引子表达式。如果此评估完成 突然,则赋值表达式为 原因相同,并且未计算右侧操作数,并且没有 分配发生
- 否则,将计算右侧操作数的。如果此计算突然完成,则赋值表达式完成 出于同样的原因突然发生,且未发生分配
- […](进一步的步骤已说明)
arr[index]
)吹毛求疵:
arr[index]
没有计算,因为它甚至不是这里的表达式arr
和index
是@zch:arr[index]
是一个表达式,不是吗?@OliCharlesworth,实际上不在赋值的左侧(在Java中)。这肯定不像是一个表达式。@zch:嗯,有点像。但事实上,你答案中的引语将其描述为一种表达……换句话说,永远不要羞于使用括号。
40 2
=
+------+-------+
| |
arr[index] =
+----+----+
| |
index 2