this
не влияет на полученный код - это оператор времени компиляции, и код, сгенерированный с ним или без него, будет одинаковым. Когда вы должны использовать это, зависит от контекста. Например, вы должны использовать его, как вы сказали, когда у вас есть локальная переменная, которая скрывает переменную класса, и вы хотите сослаться на переменную класса, а не на локальную.
edit: под "результирующим кодом будет то же самое", я имею в виду, конечно, когда некоторая переменная в локальной области видимости не скрывает принадлежащую классу переменную. Таким образом
class POJO {
protected int i;
public void modify() {
i = 9;
}
public void thisModify() {
this.i = 9;
}
}
результирующий код обоих методов будет одинаковым. Разница будет, если какой-нибудь метод объявит локальную переменную с тем же именем
public void m() {
int i;
i = 9; // i refers to variable in method's scope
this.i = 9; // i refers to class variable
}