Wie arbeitet das Schlüsselwort instanceof im Hintergrund??
-
Hallo,
ich habe eine allgemeine Frage:
Wie arbeitet das Schlüsselwort instanceof im Hintergrund??
Falls eine Klasse "XY" 5 Mal abgeleitet wurde und man verwendet instanceof
auf das Objekt dieser Klasse "XY", wie wird die Vererbungshierarchie durchsucht??Ich würde gerne etwas detailierte wissen, wie das Schlüsselwort instanceof arbeitet, und warum dadurch Overhead erzeugt wird!
Vielen Dank im Voraus
-
Hi
Also ich weis das ja nicht genau aber mich würde das auch mal interesseiren.
Aber ich denke mal das das mit dem Overhead damit zu tun hat, das die JVM nachschaut ob das Objekt von der Klasse XY ist wenn nicht geht er von der Vererbungshirarchie eine Ebene tiefer und schaut noch mal nach, bis alle Klassen abegearbeitet sind die von XY Abgeleitet sind.
Ich bin mir jetzt da nicht 100% sicher das funktionsweise so ist wie o.g.
Falls jemand detailierte Kenntnisse darüber hat, immer her damit.BYE
-
instanceof liefert true wenn das zu vergleichende Objekt nicht null ist und es möglich ist das zu vergleichende Objekt auf den anderen Typ zu casten ohne eine ClassCastException zu werfen. Ansonsten ist das Ergebnis stets false.
-
Das mit dem instanceof funktioniert etwas nach dem folgenden Prinzip:
Jedes Object kennt seinen Klassendescriptor. Der Klassendescriptor kennt neben den Methoden, Feldern, usw. auch ein array von ancestors. Diese kann man auch mit Object.getSuperclass():Class abfragen.
Das instanceof muss also dieses Array so lange durchforsten, bis es eine Übereinstimmung zwischen dem Namen der zu prüfenden Klasse und dem Namen der Klasse des zu prüfenden Objects gefunden hat oder aber bei Object landet.
Das braucht dann einfach Zeit. Man sollte also gut überlegen, ob man sich wirklich für die Vererbungshierarchie interessiert, oder ob ein Vergleich des aktuellen Klassennamens ausreicht.
/Dirk
-
Danke Dirk
So geht das also.
Sollte man eigentlich wissen wenn man damit arbetien will.
BYE
-
Siehe dazu Java Language Specification
http://java.sun.com/docs/books/jls/first_edition/html/15.doc.html#80289
-
Danke