O this é usado para acessar um atributo da instância do objeto que foi criada e está sendo acessada.
Ele não é obrigatório, em alguns casos faz mais sentido que outros usar, mas facilita a legibilidade e evita problemas como erro de lógica devido ao shadowing, por exemplo, imagine a situação:
class Conta {
double saldo;
void deposita(double saldo) {
this.saldo = saldo;
}
}
Nesse código, dizemos que estamos pegando o valor saldo passado por parâmetro ao método deposita e atribuindo à variável de instância saldo (usamos o this nela para diferenciar uma de outra). Se usássemos assim:
class Conta {
double saldo;
void deposita(double saldo) {
saldo = saldo;
}
}
não haveria atribuição para variável de instância pois como as duas tem o mesmo nome utiliza-se apenas saldo passado por parâmetro (escopo da funçõa) e o saldo da instância continuaria com o valor padrão 0.0. Em um código mais complexo pode ficar confuso visualizar quais são variáveis de instância e quais são locais.