Objects (Objekte)
Kurz: Eine konkrete Instanz einer Klasse — während die Klasse nur der Bauplan ist, ist das Objekt das tatsächlich im Speicher existierende “Ding” mit eigenen, konkreten Werten.
Genauer: Aus derselben Klasse lassen sich beliebig viele Objekte erzeugen, die jeweils unabhängige Kopien der in der Klasse definierten Felder besitzen (jedes Auto-Objekt hat z. B. seine eigene Farbe), aber sich dieselben Methoden teilen. Der Zugriff auf ein Objekt erfolgt über eine Referenz (siehe Non-primitive Types), nicht über den direkten Wert selbst.
Im Detail
Der wichtigste Unterschied zwischen einem Objekt und einem primitiven Wert (wie einer Zahl) liegt darin, WIE Variablen sie speichern und weitergeben: Eine Zahl-Variable enthält den Wert direkt, ein Objekt-Variable enthält nur eine Referenz (im Grunde eine Speicheradresse) auf das eigentliche Objekt, das an anderer Stelle im Speicher liegt.
Auto auto1 = new Auto("Rot");
Auto auto2 = auto1; // auto2 zeigt auf DASSELBE Objekt wie auto1!
auto2.farbe = "Blau";
System.out.println(auto1.farbe); // gibt "Blau" aus - beide Variablen teilen sich das ObjektDieses Verhalten überrascht viele Einsteiger: auto2 = auto1 kopiert NICHT das Auto, sondern nur die Referenz darauf — beide Variablen zeigen danach auf exakt dasselbe Objekt im Speicher. Eine Änderung über die eine Variable ist deshalb auch über die andere sichtbar. Will man wirklich eine unabhängige Kopie, muss man das explizit anfordern (z. B. über eine eigens geschriebene “Kopier”-Methode oder einen Kopier-Konstruktor).
Ein Objekt existiert im Speicher, solange irgendetwas im Programm noch eine Referenz darauf hält — verliert die letzte Referenz ihren Bezug (z. B. weil die Variable den Gültigkeitsbereich verlässt oder überschrieben wird), gilt das Objekt als “nicht mehr erreichbar” und wird in Sprachen mit automatischer Speicherverwaltung (z. B. Java, JavaScript, Python) irgendwann vom Garbage Collector aus dem Speicher entfernt, ohne dass man das manuell veranlassen muss.
Zwei Objekte auf inhaltliche Gleichheit zu vergleichen (haben beide dieselben Feldwerte?) ist etwas anderes als zu prüfen, ob zwei Variablen auf DASSELBE Objekt zeigen (Referenzgleichheit) — viele Sprachen bieten dafür bewusst zwei unterschiedliche Vergleichsoperationen (z. B. .equals() vs. == in Java) an, und Verwechslungen zwischen beiden sind eine häufige Fehlerquelle.
Siehe auch: Classes, Non-primitive Types, OOP