Kurz erklärt
Der Datentyp für Text in Java — technisch ein Objekt (kein primitiver Typ), aber mit Sonderbehandlung, die die Nutzung fast wie bei einem primitiven Typ wirken lässt.
Genauer
String-Objekte sind unveränderlich (immutable): jede scheinbare Änderung (z. B. .toUpperCase()) erzeugt in Wirklichkeit ein neues Objekt, das ursprüngliche bleibt unverändert. Wegen des sogenannten "String Pools" kann == bei zwei gleich geschriebenen String-Literalen zwar zufällig true liefern — für einen verlässlichen Inhaltsvergleich gehört trotzdem immer .equals() genutzt.