In der Java-Programmierung ist es oft notwendig, den Typ eines Objekts zu überprüfen, um die entsprechenden Aktionen abhängig von seiner Klasse auszuführen. Dazu können Sie den instanceof-Operator oder die getClass() -Methode verwenden. Obwohl beide Ansätze es ermöglichen, den Objekttyp zu überprüfen, haben sie ihre eigenen Unterschiede und können in verschiedenen Situationen verwendet werden.
Der instanceof-Operator ist ein Boolescher Operator, der prüft, ob ein Objekt eine Instanz einer angegebenen Klasse ist oder ob seine Klasse ein Erben einer bestimmten Klasse ist. Wenn wir beispielsweise ein obj-Objekt haben, können wir den instanceof-Operator verwenden, um zu überprüfen, ob obj eine Instanz der SomeClass-Klasse ist:
if (obj instanceof SomeClass)
// Code ausführen, wenn obj eine Instanz von SomeClass ist
Die getClass() -Methode ist eine Methode, die für jedes Objekt in Java verfügbar ist und einen Verweis auf die Klasse zurückgibt, zu der das Objekt gehört. Zum Beispiel haben wir ein obj-Objekt und können mit der getClass() -Methode einen Verweis auf seine Klasse erhalten:
Class objClass = obj.getClass();
Die resultierende Klassenreferenz kann verwendet werden, um den Objekttyp zu überprüfen, mit anderen Klassen zu vergleichen und vieles mehr.
instanceof Begriff Definition
Beispiel für die Verwendung des instanceof-Operators :
public class Main if (obj2 instanceof Integer) >>
In diesem Beispiel wird der instanceof-Operator verwendet, um zu überprüfen, ob obj1 eine Instanz der String-Klasse und obj2 eine Instanz der Integer-Klasse ist. Als Ergebnis der Ausführung des Programms wird die Meldung "obj1 ist eine Instanz der String-Klasse" und "obj2 ist eine Instanz der Integer-Klasse" angezeigt.
Definition von getClass
Beispiel für die Verwendung der getClass() -Methode :
String str = "Пример строки";Class strClass = str.getClass();
In diesem Beispiel enthält die Variable strClass ein Objekt vom Typ Class, das die String-Klasse darstellt. Jetzt können Sie die Methoden der Klasse Class verwenden, um auf Informationen über die Klasse und ihre Struktur zuzugreifen.
Die getClass() -Methode kann nützlich sein, wenn Sie den Typ eines Objekts überprüfen oder abhängig von seiner Klasse Aktionen ausführen möchten. Zum Beispiel:
Object obj = new String("Пример строки");if (obj.getClass() == String.class) else
In diesem Beispiel vergleichen wir die Objektklasse, die mit der getClass() -Methode abgerufen wurde, mit der String-Klasse.class . Wenn sie gleich sind, ist das Objekt eine Zeichenfolge. Andernfalls ist es keine Zeichenfolge.
Unterschied zwischen instanceof und getClass
Der instanceof-Operator überprüft, ob ein Objekt eine Instanz einer angegebenen Klasse oder einer Unterklasse ist. Der Operator gibt den booleschen Wert true zurück, wenn das Objekt eine Instanz der angegebenen Klasse ist, andernfalls false. Zum Beispiel:
Person person = new Person();if (person instanceof Person)
Die getClass() -Methode gibt ein Class-Objekt zurück, das zur Laufzeit Informationen zum Objekttyp bereitstellt. Die getClass() -Methode kann für jedes Objekt aufgerufen werden und gibt die Klasse zurück, zu der das Objekt gehört. Zum Beispiel:
Person person = new Person();Class classObject = person.getClass();System.out.println("The class of person object is: " + classObject.getName());
Ein Unterschied zwischen instanceof und getClass() besteht darin, dass instanceof überprüft, ob ein Objekt eine Instanz einer angegebenen Klasse oder einer Unterklasse ist, während getClass() die Klasse zurückgibt, zu der das Objekt gehört. Dies bedeutet, dass instanceof verwendet werden kann, um die Vererbungstypen zu überprüfen, während getClass() die spezifische Klasse zurückgibt, zu der das Objekt gehört, ohne seine Unterklassen zu berücksichtigen.
Ein weiterer Unterschied besteht darin, dass instanceof verwendet werden kann, um zu überprüfen, ob eine Schnittstelle vorhanden ist, während getClass() dies nicht zulässt. Zum Beispiel:
Person person = new Person();if (person instanceof Serializable)
Gleichzeitig erlaubt getClass() eine solche Verwendung nicht:
Person person = new Person();Class classObject = person.getClass();// Нельзя проверить наличие интерфейсаif (classObject instanceof Serializable)