Автор оригинала: Pankaj Kumar.
ключевое слово instanceof java используется для проверки того, относится ли объект к какому-либо типу или нет. Синтаксис оператора Java instanceof: obj Экземпляр объекта
– левая сторона-это экземпляр, а правая сторона-имя класса. Оператор Java instanceof возвращает логический результат.
экземпляр Java
В этом разделе давайте посмотрим, как можно использовать ключевое слово instanceof
.
Допустим, у нас есть некоторые интерфейсы и класс, определенные, как показано ниже.
interface Vehicle { } class Car { } class Ferrari extends Car implements Vehicle {}
Если мы проверим ключевое слово instanceof
с указанными выше объектами класса, мы увидим следующие результаты:
Ferrari ferrari = new Ferrari(); ferrari instanceof Vehicle // true - Ferrari implements Vehicle ferrari instanceof Car // true - Ferrari extends Car ferrari instanceof Ferrari // true - Ferrari is Ferrari ferrari instanceof Object // true - Object is the parent type of all objects
Но если мы что-то изменим, то увидим другие результаты:
Car car = new Car(); car instanceof Ferrari // false - Car is super type of Ferrari, not other way around
instanceof
– полезный инструмент, когда у вас есть коллекция объектов, и вы не уверены, что это такое.
оператор instanceof против метода isInstance()
В принципе, оба они делают одно и то же: проверяют, является ли объект экземпляром того же класса, что и другой.
Оператор instanceof работает во время компиляции, тогда как метод isInstance() работает во время выполнения. Например:
// This method tells us whether the object is an // instance of class whose name is passed as a // string 'c'. public static boolean checkType(Object obj, String c) throws ClassNotFoundException { return Class.forName(c).isInstance(obj); }
Давайте применим вышеприведенный метод, чтобы продемонстрировать его использование:
String str = "Shubham"; checkType(str, "java.lang.String"); // true checkType(str, "java.lang.Object"); // true
Экземпляр Java с массивом
Массив Java также является объектом, но оператор instanceof работает по-другому, когда он используется с массивом. Например;
new int[] {1} instanceof Object; // true
Но если мы попробуем что-то вроде приведенного ниже:
new String[]{"1"} instanceof String
Затем мы получаем ошибку времени компиляции в виде Несовместимых типов условных операндов String[] и String
. Однако ниже использование оператора instanceof работает нормально.
new String[]{"1"} instanceof String[] // true
Пример экземпляра Java
Вот полный пример для экземпляра оператора
java и isInstance
метода.
package com.journaldev.instanceofoperator; interface Vehicle {} class Car {} class Ferrari extends Car implements Vehicle {} public class InstanceOfExample { public static void main(String[] args) throws ClassNotFoundException { Car car = new Car(); Ferrari ferrari = new Ferrari(); String str = "Pankaj"; String[] strArray = { "1" }; System.out.println(ferrari instanceof Vehicle); // true - Ferrari implements Vehicle System.out.println(ferrari instanceof Car); // true - Ferrari extends Car System.out.println(ferrari instanceof Ferrari); // true - Ferrari is Ferrari System.out.println(ferrari instanceof Object); // true - Object is the parent type of all objects System.out.println(null instanceof Object); // false - null is not an Object System.out.println(car instanceof Ferrari); // false - Car is supertype of Ferrari, not other way around System.out.println(new int[] { 1 } instanceof Object); // true System.out.println(strArray instanceof String[]); // true System.out.println("*****"); System.out.println(checkType(str, "java.lang.String")); // true System.out.println(checkType(str, "java.lang.Object")); // true System.out.println(checkType(str, "com.journaldev.instanceofoperator.Vehicle")); // false System.out.println(checkType(strArray, "java.lang.Object")); // true System.out.println(checkType(strArray, "java.lang.String")); // false } public static boolean checkType(Object obj, String c) throws ClassNotFoundException { return Class.forName(c).isInstance(obj); } }
Это все для примера оператора java.
Ссылка: Документация Oracle