Java instanceof: So funktioniert der Operator

Mit dem Java-Operator instanceof überprüfen Sie die Übereinstimmung zwischen einem Objekt und einer Klasse. Der Operator liefert diese Information in Form einer boolschen Aussage, also „true“ oder „false“. Durch die Überprüfung können Sie Fehlermeldungen vermeiden.

Was ist instanceof in Java?

Nicht alle Variablen in Java sind so spezifisch, dass ihre Beschaffenheit sofort ersichtlich ist. Gerade wenn in der Programmiersprache ein umfangreiches Projekt mit zahlreichen Variablen erstellt wird, können zum Beispiel Input-Daten dafür sorgen, dass eine Variable am Ende als eines von mehreren Objekten erscheint. Aus diesem Grund stellt Java den instanceof-Operator zur Verfügung. Dieser stellt sicher, dass die Instanz (engl. „instance“) einer Referenzvariablen auch tatsächlich mit einer Klasse, Unterklasse oder Schnittstelle übereinstimmt. Ist dies der Fall, gibt der Operator den boolschen Wert „true“ (wahr) aus. Gibt es keine Übereinstimmung, lautet die Ausgabe „false“ (unwahr).

Insbesondere bevor ein unbekanntes Objekt umgewandelt wird, sollte unbedingt Java instanceof durchgeführt werden, um sicherzugehen, dass das Objekt zur angenommenen Klasse gehört. Ohne diesen Sicherheitscheck kann es ansonsten vorkommen, dass eine ClassCastException ausgegeben wird. Diese entsteht, wenn ein Objekt in eine andere Klasse umgewandelt werden soll. Die Fehlermeldung kann gerade in einem längeren Code für Verwirrung und Probleme sorgen, weshalb eine frühzeitige Absicherung ratsam ist.

Günstige Webhosting-Pakete von IONOS!

Vertrauen Sie auf flexibel skalierbares und zuverlässiges Webhosting inklusive persönlichem Berater mit IONOS!

Kostenlose Domain
SSL Zertifikat
DDoS-Schutz

Funktionsweise und Syntax

Wenn Sie instanceof in Java durchführen, vergleicht der Operator eine Referenzvariable mit einer bestimmten Klasse, die Sie ebenfalls angeben. Er trifft keine weiteren Aussagen über die Beschaffenheit des Objekts oder der Klasse, sondern bestimmt lediglich, ob eine Übereinstimmung besteht oder nicht. Auch die Syntax ist dementsprechend sehr einfach. Sie sieht folgendermaßen aus:

(objekt) instanceof (klasse)
java

Ist (objekt) eine Instanz von (klasse) wird „true“ ausgespielt. Ist dies nicht der Fall, erscheint „false“.

Einfaches Beispiel für einen instanceof-Operator in Java

Am einfachsten lässt sich Java instanceof und seine Funktionsweise mit einem kurzen Beispiel veranschaulichen. Dafür erstellen wir zunächst eine Klasse namens „Tier“.

public class Tier {
}
java

Im nächsten Schritt erweitern (engl. „extend“) wir diese Klasse um eine Unterklasse namens „Katze“.

public class Katze extends Tier {
}
java

Nun können wir Java instanceof nutzen, um zu überprüfen, ob eine Instanz von „Katze“ zur Klasse „Tier“ gehört. Dafür nutzen wir die folgenden Zeilen und geben Sie mit dem Java-Befehl System.out.println aus:

public class Tier {}
public class Katze extends Tier {

public static void main(String args []{
Katze Katze = new Katze();
System.out.println(Katze instanceof Tier);
}
}
java

Die Ausgabe sollte so aussehen:

true
java

Mehrere Ebenen und die Object-Klasse

Das Prinzip funktioniert auch mit der Main-Klasse und weiteren Unterklassen. Zur Veranschaulichung wählen wir ein weiteres Beispiel mit mehreren Ebenen und erweitern den Operator instanceof in Java um die Anweisung if-else. Bei den Texten hinter den zwei Querstrichen handelt es sich um Java Comments, die lediglich die einzelnen Schritte erläutern, für die Ausgabe aber keine Rolle spielen.

// Klasse 1
// Oberklasse
public class Tier {
}

// Klasse 2
// Unterklasse
class Katze extends Tier {
}

// Klasse 3
// Main-Klasse
class Main {

public static void main(String[] args)
Katze Katze1 = new Katze();
if (Katze1 instanceof Katze)
	System.out.println ("Katze1 ist eine Instanz von Katze");
else
	System.out.println ("Katze1 ist KEINE Instanz von Katze");

if (Katze1 instanceof Tier)
	System.out.println ("Katze1 ist eine Instanz von Tier");
else
	System.out.println ("Katze1 ist KEINE Instanz von Tier");

if (Katze1 instanceof Object)
	System.out.println ("Katze1 ist eine Instanz von Object");
else
	System.out.println ("Katze1 ist KEINE Instanz von Object);
	}
}
java

Da in unserem Beispiel „Katze1“ eine Instanz der Klasse „Katze“ und der Oberklasse „Tier“ ist, werden beide Abfragen mit „true“ beantwortet. Da Object bzw. die Klasse „java.lang.Object“ in der Hierarchie ganz oben steht, ist „Katze1“ außerdem eine Instanz von Object. Der Java instanceof Operator wird somit immer „true“ ausgeben, wenn er mit der Object-Klasse angewendet wird. Die entsprechende Ausgabe sieht daher so aus:

Katze1 ist eine Instanz von Katze
Katze1 ist eine Instanz von Tier
Katze1 ist eine Instanz von Object
java

Ausgabe bei einem Null-Wert

Wenn eine Variable den Wert 0 hat, also kein Objekt enthält, gibt der Java Operator instanceof automatisch „false“ aus. Dies können Sie mit dem folgenden Beispiel überprüfen:

class Katze {
}

class Main {
public static void main(String[] args)
{
Katze Katze2 = null;
if (Katze2 instanceof Katze)
	System.out.println ("Katze1 ist eine Instanz von Katze");
else
	System.out.println ("Katze1 ist KEINE Instanz von Katze");
	}
}
java

Die passende Ausgabe lautet in diesem Fall:

Katze1 ist KEINE Instanz von Katze
java

Oberklassen sind keine Instanz einer unteren Klasse

Während in der Hierarchie Objekte in Unterklassen auch zu den übergeordneten Klassen gehören, funktioniert dieses Prinzip andersherum nicht. In unserem folgenden Beispiel können wir dies veranschaulichen:

class Tier {
}
class Katze extends Tier {
}

class Main {
public static void main(String[] args)
{
Tier Bello = new Tier ();
if (Bello instanceof Katze)
	System.out.println ("Bello ist eine Instanz von Katze");
else
	System.out.println ("Bello ist KEINE Instanz von Katze");
	}
}
java

Die Ausgabe lautet in diesem Fall:

Bello ist KEINE Instanz von Katze
java

Fehlermeldung bei fehlender Verbindung

Wenn es keine Verbindung zwischen dem Objekt und der Klasse, mit der es verglichen werden soll, gibt, wird eine Fehlermeldung ausgegeben. Auch das zeigen wir an einem Beispiel und erstellen eine neue Klasse namens „Hund“, die zwar zur Oberklasse „Tier“ gehört, allerdings in keiner Verbindung zu „Katze“ steht.

class Hund implements Tier {
}

class Main {
public static void main(String[] args)
{
Katze Katze3 = new Katze ();
System.out.println (Katze3 instanceof Hund);
	}
}
java

In diesem Fall erhalten wir eine Fehlermeldung, die uns darauf hinweist, dass zwischen den Klassen „Katze“ und „Hund“ keinerlei Verbindung besteht. Diese Meldung sieht so aus:

java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Katze and Hund
java
Tipp

In unserem Digital Guide finden Sie weitere spannende Tutorials und informative Artikel zu Java. Wir vergleichen zum Beispiel Java und JavaScript und stellen Java und Python gegenüber. Wenn Sie mehr über Java Bitwise Operators erfahren möchten, haben wir ebenfalls den passenden Leitfaden.