Что такое ключевое слово instanceof в Java?
Java instanceof - это ключевое слово. Это двоичный оператор, используемый для проверки, является ли объект (экземпляр) подтипом данного типа. Он возвращает либо true, либо false. Он возвращает true, если левая часть выражения является экземпляром имени класса с правой стороны. Instanceof оценивает значение true, если объект принадлежит определенному классу или его суперклассу; else вызывает ошибку компиляции. Если мы применим оператор instanceof с любой переменной с нулевым значением, он вернет false. Это полезно, когда ваша программа может получить информацию о типе времени выполнения для объекта. Ключевое слово instanceof также известно как оператор сравнения типов, поскольку он сравнивает экземпляр с типом.
Синтаксис
( Object reference variable ) instanceof (class/interface type)
Пример
interface Vehicle {} class Car {} class Ford extends Car implements Vehicle {} class Suzuki extends Car implements Vehicle {} public class TestClass { public static void main(String[] args) { Object ford = new Ford(); if ( ford instanceof Vehicle ) { System.out.println("True: Ford implements Vehicle"); } if ( ford instanceof Car ) { System.out.println("True: Ford extends Car"); } if ( ford instanceof Ford ) { System.out.println("True: Ford is Ford"); } if ( ford instanceof Object ) { System.out.println("True: Object is the parent type of all objects"); } } }
Однако, с Object car = new Car();
if ( car instanceof Ford ) // fasle
В приведенном выше случае он возвращает фальсификацию, потому что автомобиль является супертипом Ford и, возможно, менее «усовершенствованным».
Кроме того, если попробовать ford instanceof Suzuki даже не компилировать! Это потому, что Ford не является подтипом или супертипом Suzuki, и он также не реализует его.
Важно отметить, что переменная, используемая для ford выше, имеет тип Object. Это означает, что instanceof является операцией во время выполнения и приводит нас к прецеденту: реагировать по-разному на основе типа объекта во время выполнения.
В некоторых других случаях ключевое слово instanceof - полезный инструмент, когда у вас есть коллекция объектов, и вы не знаете, что это такое. Например, у вас есть коллекция элементов управления в форме. Вы хотите прочитать проверенное состояние всех флажков, но вы не можете запросить простой старый объект для его проверенного состояния. Вместо этого вы увидите, является ли каждый объект флажком, и если да, установите его в поле и проверьте его свойства.
if (obj instanceof Checkbox) { Checkbox cb = (Checkbox)obj; boolean state = cb.getState(); }
ключевое слово instanceof и значение null
Если мы применим оператор instanceof с переменной с нулевым значением, она вернет false. Давайте посмотрим пример, приведенный ниже, где мы применяем оператор instanceof с переменной, имеющей нулевое значение.
public class TestClass { public static void main(String[] args) { TestClass tc=null; System.out.println(tc instanceof TestClass);// return false } }
Выход
ложный