Оператор instanceof

Открыта

— Привет, Амиго! Ты уже раньше знакомился с оператором instanceof. Сегодня я расскажу тебе, как и где его можно использовать. instanceof – это очень простой и эффективный в использовании оператор.

— Звучит, как реклама!

— Он, и правда, очень простой. Он используется в виде: «объект» instanceof «класс».

Он проверяет, является ли объект объектом определенного класса. Все еще проще, чем я говорю. Смотри пример:

Код Описание
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt будет равно true. Объект, на который ссылается переменная o, является объектом класса Integer.
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt будет равно false. Объект, на который ссылается переменная o, не является объектом класса Integer, он является объектом класса String.
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof
FileInputStream;
isFIS будет равно true. Объект, на который ссылается переменная is, является объектом класса FileInputStream.
4
Задача
Java Core,  4 уровень,  1 лекция
Недоступна
Набираем код Ӏ Java Core: 4 уровень, 1 лекция
Java Core: 4 уровень, 1 лекция. Иногда думать не надо, строчить надо! Как ни парадоксально звучит, порой пальцы «запоминают» лучше, чем сознание. Вот почему во время обучения в секретном центре JavaRush вы иногда встречаете задания на набор кода. Набирая код, вы привыкаете к синтаксису и зарабатываете немного материи. А ещё — боретесь с ленью.

— Да, очень просто.

— Этот оператор учитывает и наследование. Вот смотри.

Код Описание
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
Тут мы видим три объявленных класса: животное, кот и тигр. Кот наследуется от Животного. А Тигр от Кота.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat будет равно true.
isTiger будет равно true.
isAnimal будет равно true.
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat будет равно false.
isTiger будет равно false.
isAnimal будет равно true.

И даже интерфейсы:

Код Описание
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Создадим два класса: Cat, TomCat и интерфейс Moveable
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat будет равно true.
isMoveable будет равно true.
isTom будет равно true.
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat будет равно true.
isMoveable будет равно false.
isTom будет равно false.

Оператор instanceof имеет вид: a instanceof B.

Другими словами, оператор instanceof вернет значение true, если:

1) переменная а хранит ссылку на объект типа B

2) переменная a хранит ссылку на объект, класс которого унаследован от B

3) переменная а хранит ссылку на объект реализующий интерфейс B

Иначе оператор instanceof вернет значение false.

— Понятно. А зачем это нужно, дядя Риша?

— Об этом сегодня тебе расскажет Элли. Это очень хороший оператор. Сегодня ты в этом убедишься.

Комментарии (62)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Михаил15 уровень
17 июля, 09:48
"a instanceof B" - по русски идёт проверка явялется ли "а" наследником "В", результат да / нет = true/false
Антон15 уровень, Москва
11 июня, 15:29
знакомый достаточно опытный коллега-кодер, сказал что на практике instanceof плохая бяка, т.к. жрет много ресурсов и гораздо выгоднее написать несколько методов под несколько разных типов параметров (если их вменяемое количество) а не дергать каждый раз instanceof
Андрей15 уровень, Москва
6 мая, 19:06
В последнем примере Cat o реализует интерфейс Moveable. Тогда почему o instanceof Moveable равно false?
Robert Grankin17 уровень, Narva
7 мая, 19:25
взгляни на код еще раз, в последнем примере класс Том реализует интерфейс, а класс Cat не реализует
Андрей15 уровень, Москва
8 мая, 17:48
Спасибо.
Карим28 уровень
2 мая, 09:25
если А наследуется (instanceof) от B то return true; else{ return false;}
Влад16 уровень
12 апреля, 18:37
Лучше бы звучало дядя Ришат. Как истинный татарин)
Oleksii Klymenchuk25 уровень
16 апреля, 15:58
Лучший коммент за неделю!😂
Роман19 уровень, Нижний Новгород
21 мая, 09:30
Это не татарин, это еврей.
Graf Vorontsov17 уровень, Черкассы
12 января, 15:05
barracuda26 уровень, Санкт-Петербург
30 января, 08:06
Про null хорошо сказано.
zeus29 уровень
2 января, 08:57
это указанный объект? нет. (если да вывод true) это является его родителем? нет вывод false иначе true
Егор Гераськин20 уровень, Саратов
15 октября 2019, 15:31
Проще запомнить так: переменная а хранит ссылку на объект класса, унаследованного от B, или на объект самого класса B
Виктор Шефф20 уровень, Москва
22 ноября 2019, 13:27
Ни разу не проще, вот правда))
Егор Гераськин20 уровень, Саратов
22 ноября 2019, 19:37
Ну тогда уж если совсем по простому, "А есть объект класса B".
AlinaAlina27 уровень, Санкт-Петербург
18 марта, 14:04
А это уже не совсем по существу)))
Игорь Birt19 уровень, Тирасполь
13 мая, 05:32
Битва 20х уровней))
Михаил16 уровень, Москва
2 июля 2019, 10:38
3) переменная а хранит ссылку на объект реализующий интерфейс B Запятую поставьте после "объект"
Вэйлор27 уровень
14 мая 2019, 09:41
"дядя Риша" )) оказывается внизу комментов кто-то уже писал подобный коммент))