¿Cuál es la orden de evaluación para esta línea suponiendo que i = 0 y todos los elementos de matriz se inicializa a 0 a [i ++] = a [i ++] + 2;

Mustafa Mahmod:

Me encontré con esta línea de código en Java en el libro de pocas palabras y me gustaría saber cómo dividir el código del compilador

a[i++] += 2;
a[i++] = a[i++] + 2;
Andrew Tobilko:

15.26.1. Operador de asignación simple =

Si la izquierda operando es una expresión de acceso a matriz (§15.10.3), posiblemente cerrado en uno o más pares de paréntesis, entonces:

En primer lugar, la subexpresión referencia a la matriz de la expresión de la izquierda operando de acceso a conjunto se evalúa. Si esta evaluación completa bruscamente, entonces la expresión de asignación completa bruscamente por la misma razón; la subexpresión de índice (de la expresión de la izquierda operando acceso a matriz) y de la derecha operando no se evalúan y se produce ninguna asignación.

De lo contrario, se evalúa la subexpresión índice de la expresión de la izquierda operando acceso a una matriz . Si esta evaluación completa bruscamente, luego de completarse la expresión de asignación bruscamente por la misma razón y de la derecha operando no se evalúa y se produce ninguna asignación.

https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.26.1

Asumo el orden de evaluación debe ser el siguiente

a[i++] = a[i++] + 2;
  ^      ^ ^
  1      3 2
         ----------
             ^
             4
------
  ^
  5
--------------------
         ^
         6

Podemos demostrarlo mediante la ejecución de este fragmento

int[] a = {0, 10, 0, 0};
int i = 0;
a[i++] = a[i++] + 2;

System.out.println(Arrays.toString(a)); // [12, 10, 0, 0]
System.out.println(i);                  // 2

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=335120&siteId=1
Recomendado
Clasificación