HashCode sobrescrito - Dúvida

public int hashCode() { int hash = 5; hash = 89 * hash + (this.agencia != null ? this.agencia.hashCode() : 0); hash = 89 * hash + (this.numero != null ? this.numero.hashCode() : 0); return hash;

Eu sobrescrevi esse HashCode com o netBeans e gostaria de saber o que siginifica esse “?” e o “:”

E o que o hashCode faz nessa linha pra retornar um valor.
Grato

eh um operador ternario significa:

if(this.agencia != null)
return this.agencia.hashCode();
else
return 0;