Datentypen, deren Variablen nicht den Wert selbst, sondern einen Verweis auf ein Objekt speichern – Codebeispiele in Java.
Variable enthält eine Adresse, nicht das Objekt
String, Arrays, alle Klassen und InterfacesnewString, Auto)Auto meinAuto = new Auto(); // meinAuto enthält Verweis auf das Auto-Objekt
String name = "Anna"; // name verweist auf ein String-Objekt
int[] zahlen = {1, 2, 3}; // zahlen verweist auf ein Array
Merkhilfe
Wert direkt vs. Verweis auf ein Objekt
| Primitive Typen | Referenztypen | |
|---|---|---|
| Beispiele | int, double, boolean, char |
String, Arrays, Klassen, Interfaces |
| Variable enthält | den Wert selbst | Verweis auf das Objekt |
| Speicherort des Werts | direkt in der Variable | Objekt im Heap |
| Standardwert (Attribute) | 0, 0.0, false, '\u0000' |
null |
Vergleich mit == |
Werte | Adressen |
| Methoden aufrufbar | nein | ja (name.length()) |
Kopiert wird nur der Verweis, nicht das Objekt
// Primitiv: Wert wird kopiert
int a = 5;
int b = a;
b = 10;
System.out.println(a); // 5, a bleibt unverändert
// Referenztyp: Verweis wird kopiert
int[] x = {1, 2, 3};
int[] y = x; // y zeigt auf DASSELBE Array
y[0] = 99;
System.out.println(x[0]); // 99, x ist mit betroffen
int[] kopie = x.clone(); // neues Array mit gleichem Inhalt
kopie[0] = 1;
System.out.println(x[0]); // 99, Original unverändert
nullReferenz, die auf kein Objekt zeigt
null → NullPointerExceptionString text = null;
// text.length(); → NullPointerException
if (text != null) {
System.out.println(text.length());
}
// int zahl = null; → Compilerfehler, primitiv
== vs. equals()Gleiche Adresse vs. gleicher Inhalt
==: gleiche Referenz → dasselbe Objekt?equals(): gleicher Inhalt?equals()String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2); // false, zwei verschiedene Objekte
System.out.println(s1.equals(s2)); // true, gleicher Inhalt
Java übergibt immer eine Kopie – bei Referenzen eine Kopie der Adresse
static void aendern(int[] arr) {
arr[0] = 42; // verändert das Objekt → wirkt nach außen
}
static void ersetzen(int[] arr) {
arr = new int[]{7, 7}; // nur lokale Kopie der Referenz → keine Wirkung außen
}
int[] daten = {1, 2};
aendern(daten);
System.out.println(daten[0]); // 42
ersetzen(daten);
System.out.println(daten[0]); // 42, unverändert
Referenztyp-Gegenstück zu jedem primitiven Typ
int → Integer, double → Double, boolean → Boolean, char → Character …List<Integer>, nicht List<int>)null seinList<Integer> liste = new ArrayList<>();
liste.add(5); // Autoboxing: int → Integer
int wert = liste.get(0); // Unboxing: Integer → int
Integer leer = null;
// int x = leer; → NullPointerException beim Unboxing
Automatisches Aufräumen nicht mehr erreichbarer Objekte
Auto a = new Auto();
a = null; // Objekt nicht mehr erreichbar → wird irgendwann entfernt