mi sono dimenticato di chiedere una cosa: la stringa a che ho utilizzato è mutabile? cioè: posso fare un copia-incolla del codice cambiando il valore di a per ogni domanda? o devo cambiare ogni volta variabile?
mi sono dimenticato di chiedere una cosa: la stringa a che ho utilizzato è mutabile? cioè: posso fare un copia-incolla del codice cambiando il valore di a per ogni domanda? o devo cambiare ogni volta variabile?
La variabile a che hai usato è mutabile (non è final) ... la variabile! Non lo "stato" dell'oggetto String a cui (se non null) fa riferimento.Originariamente inviato da John360
la stringa a che ho utilizzato è mutabile? cioè: posso fare un copia-incolla del codice cambiando il valore di a per ogni domanda? o devo cambiare ogni volta variabile?
Insomma ad a puoi assegnare nel corso del tempo quante stringhe vuoi.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
ok, e allora(scusate l'OT) a che serve StringBuffer??
StringBuffer (e StringBuilder da Java 5) sono classi per gestire un "buffer" di caratteri mutabile, cioè che è modificabile in senso di valori e quantità dei caratteri.Originariamente inviato da John360
ok, e allora(scusate l'OT) a che serve StringBuffer??
Ma mi sa che ti stai confondendo. Non confondere la "mutabilità" di una variabile con la "mutabilità" dello stato di un oggetto.
int a;
a = 10;
a = 20;
a = 30;
String s;
s = "aaa";
s = "bbb";
s = "ccc";
In tutti questi 6 casi hai cambiato il valore della variabile. Per gli int è chiaro quale è il valore (è il numero stesso assegnato). Per String e qualunque altro tipo "reference", la variabile contiene solo un riferimento all'oggetto.
Vedilo come se ci fosse un "filo" che collega la variabile all'oggetto.
s = "aaa";
vuol dire che c'è questo ipotetico filo che collega la variabile s all'oggetto String "aaa".
Facendo:
s = "bbb";
viene semplicemente "tagliato" il filo che collega s ad "aaa" e viene tirato un filo tra s e "bbb".
Ma lo stato di questi oggetti String "aaa" e "bbb" NON è cambiato affatto.
Se invece avessi:
final String s = "aaa";
s = "bbb"; // Errore di compilazione!!!
Qui è un errore di compilazione. La variabile è final, può essere inizializzata ma non può cambiare il suo valore, cioè non può fare riferimento ad un altro oggetto.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
capito tutto! grazie mille della spiegazione!![]()