Originariamente inviato da Metallica
Mi confermate anche voi che non posso (in nessun modo) effettuare lo swap dei valori di due attributi tramite un metodo?
Un metodo non può cambiare il valore delle variabili che ha il chiamante (proprio perché in Java esiste solo il passaggio per valore). Volendo usare degli oggetti si potrebbe, al limite, scambiare lo "stato" dell'oggetto.

codice:
public class Prova {
    public static void main(String[] args) {
        Valore v1 = new Valore(10);
        Valore v2 = new Valore(50);
        System.out.println (v1.v + "  " + v2.v);
        swap(v1, v2);
        System.out.println (v1.v + "  " + v2.v);
    }
    
    public static void swap(Valore a, Valore b) {
        int t = a.v;
        a.v = b.v;
        b.v = t;
    }
}

class Valore {
    public int v;

    public Valore(int v) { this.v = v; }
}
La cosa da notare è che non vengono scambiati i valori dei due reference v1 e v2 (perché con il passaggio per valore il metodo chiamato riceve una copia dei valori degli argomenti) ma viene scambiato lo "stato" interno degli oggetti.