Ciao, ho fatto quest'esercizio ma non sono sicura che sia giusto.
Dato questo codice devo dire cosa stampa e disegnare lo stato dello stack e dello heap subito prima del termine dell'esecuzione di metodoUno(a1, a2) e di metodoDue(i1, i2).
Stampa 1 2 1 2 3 5 1 2.codice:class A { private int x; public A(int val) { x = val; } public void set(int val) { x = val; } public int get() { return x; } } class PassaggioParametri { public static void metodoUno(A p1, A p2) { p1.set(3); p2.set(5); A temp; temp = p1; p1 = p2; p2 = temp; } public static void metodoDue(int p1, int p2) { p1 = 3; p2 = 5; int temp; temp = p1; p1 = p2; p2 = temp; } public static void main(String[] args) { A a1 = new A(1); A a2 = new A(2); int i1 = 1; int i2 = 2; System.out.println("Valore a1: " + a1.get()); System.out.println("Valore a2: " + a2.get()); System.out.println("Valore i1: " + i1); System.out.println("Valore i2: " + i2); metodoUno(a1, a2); metodoDue(i1, i2); System.out.println("Valore a1: " + a1.get()); System.out.println("Valore a2: " + a2.get()); System.out.println("Valore i1: " + i1); System.out.println("Valore i2: " + i2); } }
Ora lo stack e heap. Il primo blocco corrisponde al metodoUno(a1, a2) mentre il secondo blocco rappresenta il medotoDue(i1, i2). Non sono sicuro di averli disegnati bene. Gli oggetti a1 e a2 si disegnano così? Gli scambi sono corretti disegnati in questo modo?
Quando ho temp = p1 modifico la "freccia" di temp: prima puntava a temp mentre ora punta a p1, giusto?
Grazie


Rispondi quotando