2011-12-15 11 views
5

Si consideri il seguente frammento di codice in Java. So che la dichiarazione temp[index] = index = 0; nel seguente frammento di codice è praticamente inaccettabile ma potrebbe essere necessaria in alcune situazioni e quindi è necessario conoscere.Concatenamento dell'assegnazione dell'array in 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]); 
    } 
} 

visualizza il seguente output sulla console.

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

Non capisco questa dichiarazione temp[index] = index = 0;. In che modo temp[1] contiene 0? Come si verifica questo incarico?

+0

Cosa ti aspetti che 'temp [1]' sia? –

+0

Penso che sia abbastanza chiaro che si aspetta che 'index' diventi' 0 'rendendo 'temp [index]' equivalente a 'temp [0]' in modo che solo il primo elemento venga modificato. –

+4

Il messaggio Take Home qui dovrebbe essere, non scrivere il codice in questo modo. Conoscere i pezzetti di Java è un'abilità rispettabile, ma per lo più inutile. Codice come questo semplicemente non dovrebbe esistere, e dove viene trovato dovrebbe essere sradicato immediatamente. – rfeak

risposta

8

L'assegnazione è terminata (temp[index] = (index = 0)), associazione destra.

Ma prima l'espressione temp[index] viene valutata per la variabile LHS. A quel tempo index è ancora 1. Quindi l'RHS (index = 0) è terminato.

+1

+1 - La prima persona che affronta direttamente la domanda che l'OP sta effettivamente ponendo (sull'ordine di valutazione LHS vs. RHS). –

+1

Prove a supporto: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.1 –

1

L'estratto conto assegnato a zero. L'istruzione temp [index] = index = 0 ha scritto zero nell'indice AND in temp [indice]. Questo è ciò che significava. Fare tutte le variabili a sinistra di un operatore di assegnamento 0.

1

Che quella linea fa è dire che temp[index] deve essere uguale index dopo index viene assegnato il valore 0.

Questo è il motivo per cui questa sintassi è in gran parte inaccettabile. È difficile da leggere e molte persone non lo capiscono.

1

hai assegnato sia la temperatura [1] che l'indice '0' da sinistra a destra. think ass temp [index/* * /]