如果我有以下代码:
array[index] = someValue;
请问someValue或index会首先评估?
someValue
index
首先评估索引。请参阅JLS第15.26.1节,尤其是:
15.26.1。 简单赋值运算符= … 如果左侧操作数是数组访问表达式(第15.13节),可能包含在一对或多对括号中,则: 1. 首先,评估左侧操作数数组访问表达式的数组引用子表达式。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;(左操作数数组访问表达式的)索引子表达式和右操作数不求值,并且不发生赋值。 2. 否则,将评估左侧操作数数组访问表达式的index子表达式。如果该评估突然完成,则由于相同的原因,赋值表达式会突然完成,并且不会评估右侧操作数并且不会发生赋值。 否则,将评估右侧操作数。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成,并且不会发生赋值。
15.26.1。 简单赋值运算符=
…
如果左侧操作数是数组访问表达式(第15.13节),可能包含在一对或多对括号中,则:
1. 首先,评估左侧操作数数组访问表达式的数组引用子表达式。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;(左操作数数组访问表达式的)索引子表达式和右操作数不求值,并且不发生赋值。
2. 否则,将评估左侧操作数数组访问表达式的index子表达式。如果该评估突然完成,则由于相同的原因,赋值表达式会突然完成,并且不会评估右侧操作数并且不会发生赋值。
TL; DR :顺序为 1 [2] = 3