2013-04-20 9 views
5

Mi chiedo se gli array di stringhe in Java siano modificabili? So che le stringhe sono immutabili, ma che dire degli array di stringhe?Gli array di stringhe sono mutabili?

Se si dispone di un array di stringhe e si modifica il contenuto, verrà creato un nuovo oggetto stringa? O il valore attuale sarà semplicemente cambiato?

Grazie in anticipo

+0

Le matrici in Java sono modificabili, non dipendono dal tipo di matrice, saranno comunque modificabili. – bsiamionau

risposta

13

I String s contenute nel String[] sono infatti immutabili, ma la matrice è mutevole.

Ciò è ben illustrato in this answer:

  • Immutabilità significa che gli oggetti di un certo tipo non possono cambiare in modo significativo agli osservatori esterni
    • Integer, String, ecc sono immutabili
    • In genere tutti i tipi di valore devono essere
  • oggetti Array sono mutabili
    • Può essere un array di riferimenti a tipi immutabili, ma la matrice stessa è mutevole
      • significa che è possibile impostare i riferimenti a tutto quello che vuoi
      • anche per serie di primitive
    • Un array immutabile non sarà pratico
  • riferimenti agli oggetti possono essere condivisi
    • Se l'oggetto è mutevole, la mutazione sarà visto attraverso tutti questi riferimenti

EDIT:

in qualche modo correlato: Why can't strings be mutable in Java and .NET?

+1

Buona risposta, anche io posso suggerire OP a leggere [questa domanda] (http://stackoverflow.com/questions/93091/why-cant-strings-be-mutable-in-java-and-net) per ottenere, perché le stringhe in java sono immutabili. – bsiamionau

+0

@zvzdhk ha aggiunto il collegamento nella risposta. Grazie. –

+0

Qualche intuizione WTF hanno reso gli array immutabili in C#? – DanteTheSmith

3

Per quanto mi ricordo il campo dell'array farà riferimento a un'altra stringa

String[] array {"I","like","rain"}; 
array[2] = "sun" 

l'array possono essere cambiati. le stesse stringhe no.

1

In Array, ogni elemento è solo un puntatore a un oggetto. Così, quando si fa qualcosa di simile

String one = "1"; 
String two = "2"; 
String three = "3"; 
String four = "4"; 
String[] myStringArray = {one, two, three}; 
myStringArray[2] = four; 

Poi il puntatore che era al 3 ° elemento della matrice ora punta al quattro invece di tre.