Priscila, tudo bem?
Bem, aqui acontece o seguinte: como o método setB() tem uma parâmetro com o mesmo identificador de uma variável de instância, ocorre o shadowing. Sempre que dentro de setB() utilizarmos b, estaremos utulizando a variável local, nunca a de intância.
Para utilizar a variável de instância devemos utilizar o operador this de maneira explícita, para que o java possa entender quando nos referenciamos a variável local e quando nos referenciamos a de instância:
this.b = b;
Quando é feito b = b, não estamos atribuindo um valor a variável de instância, mas à própria variável local. Na prática b recebe o valor dela mesma!
Já a variável de instância b, é iniciada com o valor padrão 0. Quando invoca-se getB(), já que esse método não possui nenhuma variável para que ocorra shadowing ele retorna o valor da variável de instância, que, como vimos, não foi alterada e portanto tem valor 0.
Se não consegui ser claro o suficiente, avisa que vamos tentando tirar as dúvidas.
Abraço.