nimm ein char[] und so geht es
Wenn du ein char[] verwendest, musst du jedes Zeichen einzeln zuweißen und musst im Vornhinein wissen, wie viele Zeichen du willst. Zudem wirst du bei System.out.print() nicht das gewünschte Ergebnis bekommen. Ich vermute mal, du verwechselst da etwas mit C/C++?
Warum muss für das Einlesen und Ausgeben von Zeichenketten ein Objekt erzeugt werden?
In Java gibt es nur die primitive Datentypen char, short, int, long, float, double, byte, boolean und void. Alles andere kann nur mithilfe eines Objektes dargestellt werden. Für die Darstellung einer Zeichenkette wird deshalb die Klasse String bereitgestellt.
Hat das was mit der Unveränderlichkeit von Strings zu tun?
Nein. Die unveränderlichkeit von Strings hat damit zu tun, dass die modifikation eines Strings sehr aufwändig ist (Strings werden intern als char-Array dargestellt). Deshalb wird beim zuweißen eines neuen Wertes auch ein neues String-Objekt erzeugt.
Die JVM verwaltet intern einen Stringpool, welcher alle bislang erzeugte String-Objekte beinhaltet. Wenn der (inhaltlich) selbe String mehrmals in einem Programm verwendet wird, wird kein neuer String erzeugt, sonder die Referenz auf den im String-Pool vorhandenen verwendet.