Salve,
vorrei che qualcuno mi spiegasse come mai stampa questi risultati:

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);
    }
}
Valore a1: 1
Valore a2: 2
Valore i1: 1
Valore i2: 2
da qui in poi non capisco perchè questi risultati.
Valore a1: 3
Valore a2: 5
Valore i1: 1
Valore i2: 2

Grazie