Friz02 ha scritto:
Ma quindi dove andrebbe messo il this in questo caso (cioè dove lo mette la JVM?).
Scusa ma forse stai cercando di andare ad un livello un po' troppo specifico e che forse non ti aiuterebbe nemmeno più di tanto. Se proprio vuoi dettagli a questo livello, c'è il documento Java Virtual Machine Specification ma se stai imparando da poco Java probabilmente ti darebbe solo una marea di domande in più. È come se all'Autoscuola dessero da studiare il manuale d'uso della Ferrari di F1 ....
Il "this" inteso ora come
keyword, è la parola chiave che si può utilizzare nei sorgenti per fare riferimento all'oggetto su cui è stato invocato un metodo di istanza (o l'oggetto in costruzione, in un costruttore). Generalmente non serve esplicitarlo, in altri casi invece va usato esplicitamente.
Tornando alla tua classe Somma2, il metodo somma potresti scriverlo così:
public int somma () {
return this.x+this.y;
}
Qui ho usato esplicitamente il this ma in questo caso è del tutto superfluo, alla fin fine è e funziona esattamente come l'hai scritto tu. Perché in un metodo di istanza di quella classe le variabili di istanza 'x' e 'y' sono "in scope" (nell'ambito di visibilità) a meno che vengano nascoste per qualche motivo (e in somma() non è così infatti).
Se invece mettessi anche un metodo setter:
public void setX(int x) {
this.x = x;
}
allora qui
devo usare this, perché il parametro 'x' nasconde (si chiama
shadowing) il nome della variabile di istanza 'x'. E l'unico modo per referenziare il campo e non il parametro è quello di "qualificarlo" con il this.
Ti è più chiaro ora?