Quanto ao toString(). Por default ele te retorna o nome de sua classe, seguido de @ e o hashCode da classe em hexadecimal. O hashcode não necessariamente tem a ver com o endereço de memória.
O toString() serve para você colocar uma representação textual da sua classe. Isso é util se você quiser fazer
System.out.println(bruno);
Note que eu mandei imprimir bruno direto, não bruno.brs.
Por exemplo, vamos supor o seguinte:
public class Pessoa {
private String nome;
private String sobrenome;
public pessoa(String umNome, String umSobrenome) {
nome = umNome;
sobrenome = umSobrenome;
}
public String getNome() { return nome; }
public String getSobrenome() { return sobrenome; }
@Override
public String toString() {
return nome + " " + sobrenome;
}
}
O código abaixo iria imprimir "Bruno R. Santana":
Pessoa bruno = new Pessoa("Bruno", "R. Santana");
System.out.println(bruno);
Uma dica, para mais detalhes, dê uma lida no capítulo 3, item 9, do livro Effective Java. Você pode ler o capítulo no próprio site do livro:
http://java.sun.com/docs/books/effective/chapters.html