Il toString() che hai messo va anche bene, non è un "errore", ti facevo semplicemente notare che è superfluo.
Perché facendo:
"blabla" + oggetto
oppure
"blabla" + oggetto.toString()
il risultato finale per la stringa complessiva è lo stesso. Il bytecode generato no, non è uguale perché nel secondo caso il toString() è invocato da te mentre nel primo caso il toString() è già dentro il append(Object obj) di StringBuffer/StringBuilder usato sotto-sotto dalla concatenazione. (se ho detto cose che non comprendi ora, non fa niente)
Prego.