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; 
		}
}
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
	}
}
dove il primo codice è la classe StranoOggetto e l'altro codice è una classe di test che contiene il metodo main()

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