salve a tutti, ho letto che in java esiste il solo passaggio per copia.. anche i riferimenti vengono passati per copia. Non capisco allora l'output del seguente codice:

codice:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication1;





/**
 *
 * @author Administrator
 */
public class Main {

    
     public static class Prova
     {
         int x;
         int y;
         Prova (int xx,int yy)
             {
                x=xx;
                y=yy;
             }
     }

    private static void swap(Prova a, Prova b)
    {
        System.out.println("DENTRO PRIMA: uno= " + a.x + " due= " + b.x );
        Prova temp;
        temp=a;
        a=b;
        b=temp;
        System.out.println("DENTRO DOPO: uno= " + a.x + " due= " + b.x );
    }

    private static void change(Prova a, Prova b)
    {
        a.x=999999999;
        b.x=999999999;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        System.out.println("Hello World!");

        Prova uno,due;

        uno = new Prova(1,1);
        due = new Prova(2,2);
        System.out.println("PRIMA: uno= " + uno.x + " due= " + due.x );
        swap(uno,due);
        System.out.println("DOPO: uno= " + uno.x + " due= " + due.x );


        change(uno,due);
        System.out.println("DOPO ANZ: uno= " + uno.x + " due= " + due.x );
    }

    

}

Non capisco perchè la funzione change funzioni e la funzione swap no.
Che significa copiare i riferimenti?
alla fine anche se copio l'indirizzo (il riferimento) di un oggetto X, se vi accedo, accederò allo stesso oggetto.. non ad una copia dell'oggetto (perchè non lo creo da nessuna parte con l'operatore new..)