|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
[JAVA] Dubbio sulle stringe
Ciao,
se io ho una semplicissima classe del genere (includo solo le variabili di istanza ed il costruttore che è l'unica cosa che mi interessa circa il mio dubbio): Codice:
public class CoppiaDiOggetti{
private String p;
private int[] q;
/** COSTRUTTORE */
public CoppiaDiOggetti(String s, int[] V){
p = s;
q = V;
}
}
Per esempio se nel main ho qualcosa come: Codice:
.........................
String a = "Ciao";
int [] x = {1,2,3}
CoppiaDiOggetti C = new CoppiaDiOggetti(b,x);
.........................
Poi crea l'oggetto C di tipo CoppiaDiOggetti che conterrà il riferimento all'array ricevuto nel parametro del costruttore (quindi un riferimento ad x) ed il riferimento alla stringa ricevuta come parametro nel costruttore (quindi la stringa a)? E' corretto?!?! Ho un dubbio...mi pare di ricordare che la proff avesse detto che in Java le stringhe fossero costanti quindi mi viene il dubbio che venga costruita una nuova stringa e che nell'oggetto C ci sia il riferimento a questa nuova stringa che contiene lo stesso valore della stringa a....anche se forse era che se modificavo una stringa, visto che per Java sono costanti ne creava un'altra.... Com'è sta cosa? Grazie Andrea |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2007
Messaggi: 298
|
Infatti in Java gli oggetti String sono costanti, e sono anche oggetti (ovvero, non tipi primitivi), pertanto quando li passi come parametro passi soltanto il riferimento al oggetto e non l'oggetto stesso e pertanto la jvm non crea un oggetto copia.
Il fatto che le String siano costanti è importante in operazioni come questa: Codice:
String esempio = "uno"; esempio = esempio + "due"; |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
ehm, immagino che nella costruzione di C b sia a...
comunque, viene costruita una sola stringa, a, appunto. Nel costruttore semplicemente assegni il riferimento di 'a' a p |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Il funzionamento delle stringhe è "diverso" dagli altri oggetti perché sono immutabili, proprio come le classi wrapper (vedi Integer, Double, Number, ecc.) che funzionano nella stessa maniera.
Quando fai operazioni con le stringhe non modifichi l'istanza stessa, ma ne crei di nuove e modifichi il reference che punta alla stringa. Infatti con gli altri tipi di oggetti le operazioni vengono eseguite richiamando metodi su di essi con l'operatore punto. Le pure operazioni con stringhe possono solo essere fatte tramite assegnamento.
__________________
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:01.



















