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).
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);
}
}
Stampa 1 2 1 2 3 5 1 2.
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