2016-03-20 8 views
5

Non capisco perché non sia possibile assegnare valori agli elementi di un array utilizzando il ciclo for enhanced. Ad esempio, utilizzando ciclo for come quellaAvanzato per ciclo non funzionante per l'assegnazione di valori a un array (Java)

int[] array = new int[5]; 
    for(int i = 0; i < 5; i++) 
     array[i] = 10; 

produce quello che voglio. Ma perché che non funziona con "per ogni":

for(int element : array) 
     element = 10; 

C'è un motivo specifico per cui questo è il caso o sto facendo qualcosa di sbagliato?

risposta

8

Nel ciclo avanzato per element è una variabile locale che contiene un riferimento (o valore in caso di primitive) all'elemento corrente dell'array o Iterable su cui si sta iterando.

L'assegnazione non influisce sull'array/Iterable.

E 'equivalente a:

int[] array = new int[5]; 
for(int i = 0; i < 5; i++) { 
    int element = array[i]; 
    element = 10; 
} 

che pure non modificherà l'array.

Se è necessario modificare l'array, utilizzare un ciclo for normale.

0

La maggiore ciclo for si utilizza:

for(int element : array) 
    element = 10; 
  1. in Java abbiamo riferimenti fanno riferimento a un oggetto. In un momento un riferimento può fare riferimento a un solo oggetto. Se è fatto per fare riferimento a un altro oggetto, perde il riferimento al precedente. Quando si utilizza = allora fate element fare riferimento a un altro valore cioè 10.

  2. Qui element è di type int, che è primitive tipo. Anche se è stato un Integer allora anche Integer essendo immutable si sarebbe non è stato in grado di apportare modifiche all'oggetto come modifiche avrebbe comportato sempre un oggetto separato.

Se sarebbe stato il caso, come di seguito per un po 'di classe personalizzati dire Student.java Per alcuni List<Student> students.

for(Student std : students){ 
    std.setName("eureka"); 
} 

Ora iterazione della lista e la stampa il nome di ogni studente avrebbe portato nella stampa eureka per ogni studente. Notate che anche in questo caso l'uso di = avrebbe prodotto di nuovo lo stesso risultato ottenuto (come di nuovo avreste fatto riferimento alla variabile su un oggetto diverso, non avrebbe più fatto riferimento all'oggetto originale della lista).

Problemi correlati