# 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.

## 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:

```java
(objekt) instanceof (klasse)
```

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“.

```java
public class Tier {
}
```

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

```java
public class Katze extends Tier {
}
```

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:

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

Die Ausgabe sollte so aussehen:

```java
true
```

## 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](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-comments/), die lediglich die einzelnen Schritte erläutern, für die Ausgabe aber keine Rolle spielen.

```java
// 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);
	}
}
```

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:

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

## 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:

```java
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");
	}
}
```

Die passende Ausgabe lautet in diesem Fall:

```java
Katze1 ist KEINE Instanz von Katze
```

## 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:

```java
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");
	}
}
```

Die Ausgabe lautet in diesem Fall:

```java
Bello ist KEINE Instanz von Katze
```

## 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.

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

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
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Katze and Hund
```

Tipp In unserem Digital Guide finden Sie weitere spannende Tutorials und informative Artikel zu Java. Wir vergleichen zum Beispiel [Java und JavaScript](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-vs-javascript/) und stellen [Java und Python](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/python-vs-java/) gegenüber. Wenn Sie mehr über [Java Bitwise Operators](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-bitwise-operators/) erfahren möchten, haben wir ebenfalls den passenden Leitfaden.


This is a markdown version of: [https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-instanceof-operator/](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-instanceof-operator/) for AI/LLM consumption.