Sto iniziando a imparare Java con i tutorial di Java Trails offerti da Oracle. Sono nella sezione in cui si parla del passaggio degli argomenti ai metodi Tutorial Java ™: passaggio di informazioni a un Metodo o un costruttore .
Si dice che i tipi primitivi vengono passati per valore, il che ha senso per me. Subito dopo dice:
Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object's fields can be changed in the method, if they have the proper access level.
Ora questo non ha senso per me. Se un oggetto viene passato per valore, la modifica dei campi di quell'oggetto cambierà i campi della copia all'interno del metodo, non quello originale.
Durante il test con il programma seguente:
class Point {
int x;
int y;
public static void movePoint(Point p, int x, int y) {
p.x+=x;
p.y+=y;
}
}
class App {
public static void main(String argv[]) {
Point p1;
p1 = new Point();
p1.x = 2;
p1.y = 3;
p1.movePoint(p1,2,2);
System.out.println("x = " + p1.x + " y = " + p1.y);
}
}
Funzionava come se l'oggetto venisse passato per riferimento (dopo tutto, stampa x = 4 y = 5).
Quindi cosa significa esattamente Oracle nel passaggio sopra? Inoltre, qualcuno può riassumere cosa è passato per valore e cosa è passato per riferimento in Java?