Ответ
Ключевое слово instanceof в Java используется для проверки, является ли объект экземпляром определенного класса или интерфейса. Возвращает true, если объект принадлежит указанному типу, иначе false.
Пример:
Object obj = "Hello";
if (obj instanceof String) {
System.out.println("obj is a String");
}
Нюансы:
- Работает с наследованием: если объект — подкласс, проверка вернет
true. - Нельзя использовать с примитивами.
- В Java 16+ можно использовать в сочетании с паттерн-матчингом:
if (obj instanceof String s) {
System.out.println(s.length());
} Ответ 18+ 🔞
А, ну вот, опять этот instanceof всплыл! Слушай, это же классика, как водка с огурцом. Вроде простая штука, а сколько подводных камней, ёпта.
Представь, у тебя есть какой-то объект, и ты такой: «А ты кто, блядь, на самом деле? Ты строка, ты список, ты мой сосед Петрович?» Вот instanceof — это как паспортный контроль для объектов. Подносишь его к объекту, спрашиваешь: «Ты случаем не String?» И он тебе честно: true или false. Никакого подвоха, на первый взгляд.
Вот смотри, как это просто выглядит:
Object obj = "Hello";
if (obj instanceof String) {
System.out.println("obj is a String");
}
Видишь? Взяли Object (это как «неопознанный летающий объект» в джаве), запихнули туда строку. А потом спрашиваем: «Мужик, ты точно строка?» И если он говорит «да», то мы уже можем спать спокойно и работать с ним как со строкой. Без этой проверки компилятор тебе мозги выест, будет орать: «Э, сабака сука, Object не умеет в toLowerCase()!».
Но тут, конечно, есть свои нюансы, ядрёна вошь:
- Наследование. Это самое главное. Если твой объект — это сын, внук или правнук того класса, который ты спрашиваешь,
instanceofтоже скажетtrue. Спросил ты «тыAnimal?», а тебе и кошка, и собака, и хомяк ответят «ага». Логично же, они все животные. Это не баг, это фича. - С примитивами не работает. Нельзя спросить у
int— «а ты случаем неInteger?». Компилятор сразу тебя пошлёт нахуй с таким вопросом. Сначала оберни в класс-обёртку, потом спрашивай. - А вот это — самое вкусное, с Java 16+. Раньше ты делал проверку, а потом ещё и кастовал объект вручную. Словно проверил паспорт, а потом ещё отдельно просишь: «Ну теперь давай, перейди в кабинет и стань строкой». Теперь можно всё в одну строку, красота! Это называется паттерн-матчинг.
if (obj instanceof String s) {
System.out.println(s.length());
}
Видишь магию? Проверили instanceof и сразу объявили новую переменную s типа String. Если проверка прошла, то s — это уже наш кастованный объект, и можно сразу вызывать s.length(). Удобно, ёбать колотить! Раньше бы писали String str = (String) obj;. Теперь — раз, и готово. Экономия времени и нервов, терпения-то ноль ебать.
Короче, instanceof — это твой верный друг, когда в коде летают объекты непонятного происхождения. Главное — используй с умом, а не тыкай его везде, куда попало, как мартышлюшка с гранатой.