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