Оператор instanceof в Java

ошибок разработчиков Java Программирование и разработка

Оператор instanceof проверяет, является ли его операнд слева объектом его операнда справа. Если да, он возвращает true, в противном случае возвращает false или выдает сообщение об ошибке во время компиляции. Операнд слева должен быть экземпляром объекта операнда справа. Операнд справа — это тип, например, класс. Синтаксис использования:

objectName instanceof typeName

Между objectName и instanceof есть пробел и нет точки. Вокруг второго операнда нет круглых скобок; между instanceof и typeName есть пробел и нет точки. instanceof — это оператор отношения в Java. В Java реляционными операторами являются <, >, <=, >= и instanceof. == и != не являются реляционными операторами в Java; они являются операторами равенства. Оператор instanceof можно использовать в условии if, а также в других операторах отношения.

В Java есть два типа типов: примитивные типы и ссылочные типы. Примитивные типы не используются с оператором instanceof. Существует четыре вида ссылочных типов: типы классов, типы интерфейсов, переменные типов и типы массивов. Оператор instanceof работает с этими четырьмя видами ссылочных типов. Примитивные типы являются исключениями для использования с оператором instanceof. В этой статье показано использование оператора instanceof.

Primitive и Primitive Wrapper Classes

int является примитивным типом. Integer — это класс-оболочка примитивного типа int. Вывод следующей программы верен:

    public class TheClass {
public static void main(String[] args) {
Integer obj = 5;
boolean bl = obj instanceofInteger;
System.out.println(bl);
}
}

Integer, начинающийся с I в верхнем регистре, является ссылкой на класс, а int — примитивным типом. Оператор, использующий здесь оператор instanceof, является вторым оператором метода main(). Между obj и instanceof и между instanceof и типом должен быть пробел.

В следующей программе, где вместо Integer используется int, выдается ошибка компилятора:

    public class TheClass {
public static void main(String[] args) {
int obj = 5;
boolean bl = obj instanceofint;
System.out.println(bl);
}
}

Первый оператор метода main() должен был начинаться с Integer вместо int. Второй операнд instanceof также должен был быть Integer.

Таким же образом связаны другие примитивные типы и соответствующие им классы-оболочки.

Предопределенные типы

Тип String является примером предопределенного типа. Вывод следующей программы верен:

public class TheClass {
public static void main(String[] args) {
String obj = new String(«text»);
boolean bl = obj instanceofString;
System.out.println(bl);
}
}

Обратите внимание, как закодированы первый и второй операторы метода main().

Class Reference

Следующая программа имеет ссылку на класс AClass. Это работает с оператором instanceof. Вывод программы верен:

    class AClass {}

public class TheClass {
public static void main(String[] args) {
AClass obj = new AClass();
boolean bl = obj instanceofAClass;
System.out.println(bl);
}
}

Обратите внимание, как закодированы первый и второй операторы метода main().

Типы массивов

Объект массива косвенно создается из типа массива. Следующая программа выводит true:

public class TheClass {
public static void main(String[] args) {
char[] obj = new char[]{‘A’‘B’‘C’};
boolean bl = obj instanceofchar[];
System.out.println(bl);
}
}

Обратите внимание, как закодированы первый и второй операторы метода main(). Тип массива указывается в квадратных скобках рядом с (примитивным) типом.

Абстрактные и интерфейсные типы

Абстрактный метод обычно представляет собой сигнатуру метода, начинающуюся с зарезервированного слова abstract и заканчивающуюся точкой с запятой.

Разница между абстрактными и интерфейсными классами

Абстрактному классу предшествуют зарезервированные слова abstract и class. В интерфейсе эти два слова не предшествуют; ему предшествует только интерфейс. Перед абстрактным методом в абстрактном классе должно стоять зарезервированное слово abstract. Перед абстрактным методом в интерфейсном классе не должно стоять зарезервированное слово abstract. Класс расширяет абстрактный класс, а класс реализует интерфейс.

Подкласс и абстрактный тип

В следующей программе Sub является подклассом (унаследованным) абстрактного класса Abst. Вывод подтверждает, что объект obj Sub является экземпляром Sub, а также экземпляром Abst.

abstract class Abst {
abstract void abstMthd();
}

class Sub extends Abst {
void abstMthd() {
System.out.println();
}
}

public class TheClass {
public static void main(String[] args) {
Sub obj = new Sub();
boolean bl = obj instanceofSub;
booleanbla = obj instanceofAbst;
System.out.println(bl);
System.out.println(bla);
}
}

Результат:

true

true

Реализация и тип интерфейса

В следующей программе Impl является реализацией интерфейса Inter. Вывод подтверждает, что объект obj Impl является экземпляром Impl, а также экземпляром Inter.

interface Inter {
void abstMthd();
}

class Impl implements Inter {
public void abstMthd(){
System.out.println();
}
}

public class TheClass {
public static void main(String[] args) {
Impl obj = new Impl();
boolean bl = obj instanceofImpl;
booleanbli = obj instanceofInter;
System.out.println(bl);
System.out.println(bli);
}
}

Результат:

true

true

Тип переменной

Переменная типа закодирована в угловых скобках. Рассмотрим следующую программу:

import java.util.*;
public class TheClass {
public static void main(String[] args) {
Vector obj = new Vector();
boolean bl = obj instanceofVector;
System.out.println(bl);
}
}

Вывод: правда. Обратите внимание, как выполнено векторное кодирование.

Заключение

Оператор instanceof проверяет, является ли его операнд слева объектом его операнда справа. Если да, он возвращает true, в противном случае возвращает false или выдает сообщение об ошибке во время компиляции. Операнд слева должен быть экземпляром объекта операнда справа. Операнд справа — это тип, например, класс. instanceof — это один из реляционных операторов в Java. Оператор instanceof можно использовать в условии if.

Читайте также:  Функция Log10 в Python
Оцените статью
bestprogrammer.ru
Добавить комментарий