2011-12-15 14 views
5

Considere el siguiente fragmento de código en Java. Sé que la declaración temp[index] = index = 0; en el siguiente fragmento de código es bastante inaceptable, pero puede ser necesario en algunas situaciones y, por lo tanto, es necesario saber.Asignación de matriz de encadenamiento en Java

package arraypkg; 

final public class Main 
{ 
    public static void main(String... args) 
    { 
     int[]temp=new int[]{4,3,2,1}; 
     int index = 1; 

     temp[index] = index = 0; 
     System.out.println("temp[0] = "+temp[0]); 
     System.out.println("temp[1] = "+temp[1]); 
    } 
} 

muestra la siguiente salida en la consola.

temp[0] = 4 
temp[1] = 0 

No entiendo esta declaración temp[index] = index = 0;. ¿Cómo contiene temp[1]0? ¿Cómo ocurre esta asignación?

+0

¿Qué esperas 'temp [1]'? –

+0

Creo que es bastante claro que espera que 'index' se convierta primero en' 0' haciendo 'temp [index]' equivalente a 'temp [0]' para que solo se modifique el primer elemento. –

+4

El mensaje para llevar a casa aquí debe ser, no escriba el código de esta manera. Conocer los pedazos de Java es una habilidad respetable, pero sobre todo inútil. Código como este simplemente no debería existir, y donde se encuentra debe ser erradicado inmediatamente. – rfeak

Respuesta

8

La asignación está hecha (temp[index] = (index = 0)), derecha asociativa.

Pero antes se evalúa la expresión temp[index] para la variable LHS. En ese momento, index sigue siendo 1. Luego, se completa el RHS (index = 0).

+1

+1 - La primera persona que aborda directamente la pregunta que realmente está haciendo el OP (sobre el orden de evaluación de LHS frente a RHS). –

+1

Evidencia de apoyo: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.1 –

1

Su declaración asigna cero a ella. La declaración temp [índice] = índice = 0 escribió cero en el índice Y en la temperatura [índice]. Eso es lo que eso significaba. Hacer todas las variables a la izquierda de un operador de asignación 0.

1

Lo esa línea hace es decir que debe ser igual temp[index]index después index se le asigna el valor 0.

Esta es la razón por la cual esta sintaxis es generalmente inaceptable. Es difícil de leer y la mayoría de la gente no lo entiende.

1

asignó la temperatura [1] y el índice a '0' funcionando de izquierda a derecha. think ass temp [index/* * /]

Cuestiones relacionadas