Un String es un objeto como cualquier otro en Java, solo que el compilador interpreta el:
como:
por cuestiones de facilidad.
Ahora, los int, float y algunos otros son de tipo primitivo, no son objetos, según tu propia respuesta las clases de objeto que representan ( o encapsulan ) esas variables para ser un objeto son Integer, Float, Character...
¿Para que sirve esto? pues además de ofrecer métodos para el manejo de los mismos, ayuda en el momento de pasar a funciones la referencia de los objetos mismos ( Al no poder manejar apuntadores ), cosa que no podrías hacer si tienes una variable primitiva ( que pasa por copia de valor ).