Sul compito d'esame la professoressa mette quasi sempre un esercizio dove dato un pezzo di codice di una classe e di un main dobbiamo mostrare cosa succede in memoria (stack ed heap)...ora non mi serve sapere come si fà perchè bene o male me la cavicchio...ho solo un dubbio allucinante sugli array (lo sò è una cosa stupida e credo di sapere la risposta ma il dubbio permane in me)
Se ho il seguente codice:
codice:public class StranoOggetto { private int[] A; /** COSTRUTTORE: @param un array di interi @return un oggetto istanza della classe StranoOggetto */ public StranoOggetto (int[] V) { int i; A = new int[V.length]; // Cosruisci A della stessa lunghezza del parametro ricevuto dal costruttore for (i=0; i<A.length; i++) A[i] = V[i]; // Copia in A gli elementi di V } public int[] getArray() { return A; } }dove il primo codice è la classe StranoOggetto e l'altro codice è una classe di test che contiene il metodo main()codice:public class Test { public static void main(String[] args) { int i; int[] x={4,5,6}; StranoOggetto C = new StranoOggetto(x); b = “domani”; x[0] = 48; // 1 x = C.getArray() x[0]++; // 2 } }
Il mio dubbio è riferito a cosa succede in memoria quando viene eseguito il costruttore della classe StranoOggetto
Quanto eseguo l'operazione:
for (i=0; i<A.length; i++) A[i] = V[i]; // Copia in A gli elementi di V
io stò copiando fisicamente tutti i valori interi presenti in V dentro ad A e non i riferimenti a tale valori, giusto? (perchè sono valori primitivi).
Mentre invece se avessi avuto che A e V erano vettor di oggetti, allora facendo A[i] = V[i] avrei copiato nelle celle di memoria di A i riferimenti agli oggetti che erano nelle celle di memoria di V.
Ho capito bene?
Grazie
Andrea

Rispondi quotando