Referenztypen
Ziele
- Ich verstehe den Unterschied zwischen primitiven und Referenztypen.
- Ich weiss, dass Referenzvariablen nicht den Wert, sondern einen Verweis speichern.
- Ich kenne
null
als möglichen Wert einer Referenz. - Ich kann einfache Beispiele von Referenztypen (z. B.
String
,Array
) erkennen.
Primitive und Referenztypen
Als Auffrischung. Du hast bereits gelernt, dass es in Java zwei Arten von Datentypen gibt:
Kategorie | Beispiele | Beschreibung |
---|---|---|
Primitive Typen | int , double , char , boolean | Speichern den Wert direkt |
Referenztypen | String , Array , eigene Klassen | Speichern nur einen Verweis auf den Wert |
Vergleich von int
zu String
Folgendes Beispiel zeigt die Initialisierung eines primitiven Datentypes und eines Referenztypes:
|
|
a
enthält direkt die Zahl42
text
enthält nur eine Referenz auf einString
-Objekt im Speicher
null als Wert
Wenn eine Referenzvariable noch auf kein Objekt zeigt, ist sie null
:
|
|
Versucht man, auf name
zuzugreifen, ohne vorher etwas zuzuweisen, gibt es einen Fehler zur Laufzeit.

Vorsicht bei Vergleichen
Bei Referenztypen vergleicht ==
nicht den Inhalt, sondern ob es dieselbe Referenz ist (auf das gleiche Objekt verweist):
|
|
s1
und s2
beinhalten nur eine Zahl, auch Adresse oder Verweis genannt, welche dem Programm mitteilt, wo sich der
eigentliche String im Speicher befindet.
Hinweis: Verbindung zu Objekten
Referenztypen werden vor allem im Zusammenhang mit Objekten verwendet. In diesem Grundlagenmodul lernst du zwar noch nicht, wie man eigene Objekte erstellt – aber du wirst schon erste Referenztypen wie String
und Arrays kennenlernen.
String
ist intern bereits ein Objekt – deshalb verhält es sich wie ein Referenztyp.
Mehr zu Objekten und Klassen erfährst du später im Modul Java OOP.
Bekannte Referenztypen
Diese Referenztypen wirst du bald näher kennenlernen:
String
– für Text- Arrays – Sammlung von Werten (z. B. mehrere Zahlen)
Beide speichern nicht direkt die Werte, sondern sind Referenztypen.
Unterschied deklarieren und initialisieren
Es gibt einen wichtigen Unterschied zwischen einer expliziten Initialisierung mit null
und einer nicht initialisierten Referenzvariable.
Explizite Initialisierung
|
|
- Die Variable
name
ist deklariert und explizit mitnull
initialisiert. null
bedeutet: Die Variable verweist auf kein Objekt.- Zugriff auf Methoden oder Eigenschaften führt zu einer NullPointerException.
|
|
Nicht initialisierte Referenzvariable
|
|
- Die Variable
name
ist deklariert, aber nicht initialisiert. - Ein Zugriff ohne vorherige Zuweisung führt zu einem Compilerfehler.
|
|
Zusammenfassung
Ausdruck | Status | Verwendung möglich? | Zugriff erlaubt? |
---|---|---|---|
String name = null; | Initialisiert mit null | ✅ ja | ⚠️ Vorsicht bei Methodenaufrufen |
String name; | Nur deklariert | ❌ nein (Compilerfehler) | ❌ nicht erlaubt |
Was passiert bei String text = "Hallo";
?
Wenn du einen String
direkt mit einem Text initialisierst, dann wird der Text im sogenannten String-Literal-Pool
gespeichert:
|
|
Der String-Literal-Pool ist ein spezieller Bereich im Heap-Speicher, in dem alle konstanten Textwerte
verwaltet werden. "Hallo"
wird dort nur einmal gespeichert, auch wenn du es mehrfach verwendest.
Beispiel:
|
|
Vorteil:
- Spart Speicher
- Macht String-Vergleiche mit
==
in einfachen Fällen möglich
Wenn du bewusst neue String-Objekte erzeugst (mit new String(...)
), liegen diese zusätzlich im Heap – auch wenn der Inhalt gleich ist.

Auch wenn String-Literals eingesetzt werden sollte man Strings immer mit .equals()
vergleichen. Das Risiko ist sonst gross, dass ein Vergleich nicht korrekt funktioniert.
|
|
Vergleich von Referenztypen: ==
vs .equals()
Wenn du zwei Referenzvariablen vergleichst, musst du unterscheiden:
Vergleichen von Referenzen (Speicheradresse)
Das folgende Beispiel vergleicht die Adressen der beiden Strings, nicht den Inhalt:
|
|
Vergleichen der Inhalte
Das folgende Beispiel vergleicht den Inhalt der beiden Strings:
|
|
Zwei Strings, welche den gleichen Inhalt (Text) haben gelten als equal.

.equals()
ist in der Klasse String
(und vielen anderen Klassen) so programmiert, dass sie den Inhalt vergleicht.Vorsicht bei null
Wenn eine Variable null
ist, darfst du nicht .equals()
darauf aufrufen, sonst gibt es eine NullPointerException
:
|
|
Besser so:
|
|
Zusammenfassung
- Primitive Typen speichern Werte direkt.
- Referenztypen speichern nur einen Verweis.
null
bedeutet: keine Referenz vorhanden.String
undArray
sind die ersten Referenztypen, die du kennenlernen wirst.