O metodo toString, apesar do nome, não é utilizado para converter o oobejto em string, mas sim exibir em uma string detalhes sobre ele.
no caso do array, que é um objeto, o metodo toString , exibi detalhes do obejto array e não dos dados contido nele.
o metodo toString é herdado da classe Object, então tds objetos, possuem tal metodo. Qdo vc não subscreve este metodo, o metodo da classe pai, no caso Object, é chamado, e sua implementalção exibe o hash code do objeto
[url]http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString()[/url]
Apenas como curiosidade, segue a implementação do metodo toString da Classe Object do projeto classpath
/**
* Convert this Object to a human-readable String.
* There are no limits placed on how long this String
* should be or what it should contain. We suggest you
* make it as intuitive as possible to be able to place
* it into {@link java.io.PrintStream#println() System.out.println()}
* and such.
*
* <p>It is typical, but not required, to ensure that this method
* never completes abruptly with a {@link RuntimeException}.
*
* <p>This method will be called when performing string
* concatenation with this object. If the result is
* <code>null</code>, string concatenation will instead
* use <code>"null"</code>.
*
* <p>The default implementation returns
* <code>getClass().getName() + "@" +
* Integer.toHexString(hashCode())</code>.
*
* @return the String representing this Object, which may be null
* @throws OutOfMemoryError The default implementation creates a new
* String object, therefore it must allocate memory
* @see #getClass()
* @see #hashCode()
* @see Class#getName()
* @see Integer#toHexString(int)
*/
public String toString()
{
return getClass().getName() + '@' + Integer.toHexString(hashCode());
}