JavaRush /Курсы /Java Core /Оператор instanceof

Оператор instanceof

Java Core
4 уровень , 1 лекция
Открыта

— Привет, Амиго! Ты уже раньше знакомился с оператором 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.

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

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

Комментарии (148)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Grigoryvvv Уровень 26 Expert
13 августа 2026
13/08/2026 / 24 уровень
C0N5P1RACY Уровень 42
27 января 2026
Эх, а мне нравились всякие истории в самом начале курса, которые были в прошлом квесте :(
Anonymous #3585174 Уровень 33
11 августа 2025
Like
8 апреля 2025
есть мнение, что присутствие в коде instanceof является маркером "плохого" кода
Евгений Уровень 7
21 апреля 2025
почему?
21 апреля 2025
потому что чаще всего это костыль для того, чтобы не делать полиморфизм или не переписывать много кода.
21 апреля 2025

package org.example.sample;

import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
public class BadSample {

    public static void main(String[] args) {

        List.of(new Tiger(), new Wolf(), new Tiger()).forEach(animal -> {
            if (animal instanceof Tiger) {
                petTiger();
            } else if (animal instanceof Wolf) {
                petWolf();
            } else {
                log.info("wtf?!");
            }
        });
    }

    public static abstract class Animal {

    }

    public static class Tiger extends Animal {

    }

    public static class Wolf extends Animal {

    }

    private static void petTiger() {
        log.info("Meow-meow-meow!");
    }

    private static void petWolf() {
        log.info("Auf-auf-auf!");
    }
}

21 апреля 2025

package org.example.sample;

import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
public class BetterSample {

    public static void main(String[] args) {

        List.of(new Tiger(), new Wolf(), new Tiger()).forEach(BetterSample::pet);
    }

    public static abstract class Animal {

        public abstract void pet();
    }

    public static class Tiger extends Animal {

        @Override
        public void pet() {
            log.info("Meow-meow-meow!");
        }
    }

    public static class Wolf extends Animal {

        @Override
        public void pet() {
            log.info("Auf-auf-auf!");
        }
    }

    private static void pet(Animal animal) {
        animal.pet();
    }
}


Artemii Уровень 30
28 января 2025
Пролетарии всех стран, соединяйтесь!
Майор IT Уровень 26
18 января 2025
Трудно, но я иду!
11 декабря 2024
Philipp Vasichev Уровень 28
22 сентября 2024
🤫
Vladislav Ermolaev Уровень 1
5 сентября 2024
+
{Java_Shark} Уровень 36
26 августа 2024
++