String extrictamente no es un tipo de dato, String es una clase dentro del paquete java.lang que hereda de la clase padre Object. Esta clase se utiliza generalmente para manipular cadenas de caracteres.
Aunque tu en el código puedas ver :
realmente se esta ejecutando algo como esto:
Es decir, es una clase, como otra cualquiera, con constructor incluido ..etc
En java, una cadena es una cadena, y un array de char otra distinta, eso no quiere decir, que por ejemplo cuando llamas al metodo toUpperCase() de la clase String, el internamente recorra la cadena, caracter a caracter como si de un array de char se tratara, para transformar en mayúsculas todos los caracteres.
Para finalizar comentar que la clase String es inmutable, es decir, no se puede modificar el objeto String, sino que crea nuevas instancias que lo reemplazan, por ejemplo:
Código Java:
Ver originalcadena = cadena + " concateno";
cadena = cadena + " otro mas";
En este caso no se modifica el objeto cadena, sino que se crean nuevos objetos String que reemplazan al anterior, internamente hace algo similar a lo siguiente...
Código Java:
Ver originalcadena
= new String ("mi cadena concateno");cadena
= new String ("mi cadena concateno otro mas");
realmente en ningún momento se modifica el objeto cadena, sino que es reemplazado por otro nuevo, es decir se ha generado un nuevo objeto por cada concatenación, esto es sumamente costoso, por lo que siempre es recomendable utilizar las clases StringBuilder y StringBuffer para la concatenación de objetos String.
Es más, creo que a partir de la versión 8 de java, tienen pensado que el compilador no permita concatenar objetos String utilizando el operador "+", yo recomiendo desde aquí utilizar el método append() de las clases StringBuilder y StringBuffer.
Espero poder haberte ayudado.
Saludos.