Veo que se han proporcionado algunas soluciones pero no ninguna causa, por lo que explicaré esto en detalle, ya que creo que es tan importante saber qué estaba haciendo mal que obtener "algo" que funcione a partir de las respuestas dadas.
Primero, veamos qué tiene que decir Oracle
* <p>The returned array will be "safe" in that no references to it are
* maintained by this list. (In other words, this method must
* allocate a new array even if this list is backed by an array).
* The caller is thus free to modify the returned array.
Puede que no parezca importante, pero como verá, es ... Entonces, ¿qué falla la siguiente línea? Todos los objetos en la lista son String pero no los convierte, ¿por qué?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
Probablemente, muchos de ustedes pensarían que este código está haciendo lo mismo, pero no es así.
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
Cuando en realidad el código escrito está haciendo algo como esto. ¡El javadoc lo está diciendo! Instantará una nueva matriz, lo que será de Objetos !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
Entonces tList.toArray está instanciando objetos y no cadenas ...
Por lo tanto, la solución natural que no se ha mencionado en este hilo, pero es lo que recomienda Oracle es la siguiente
String tArray[] = tList.toArray(new String[0]);
Espero que sea lo suficientemente claro.