Почему в Java instanceof является ключевым словом, а не методом?

Почему в Java instanceof является ключевым словом, а не методом?

public static void main(String args[]) {
    Simple1 s = new Simple1();  
    System.out.println(s instanceof Simple); // true
}

person Atul Kumar Khare    schedule 20.11.2015    source источник


Ответы (4)


Вот есть метод Class.isInstance... но в основном это операция более низкого уровня, которая имеет поддержку конкретной виртуальной машины, поэтому имеет смысл использовать ее как оператор. Помимо всего прочего, для выполнения теста нет реальной необходимости получать ссылку Class — байт-код может представлять операцию более эффективно.

Обратите внимание, что вы можете сделать то же самое для множества операторов... зачем нам нужны арифметические операторы, а не вызов int x = Integer.add(y, z);, например? Есть преимущества как с точки зрения удобства, так и с точки зрения производительности (последнюю из которых умная JIT, конечно, может удалить) от наличия операторов.

person Jon Skeet    schedule 20.11.2015

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

Также isInstance присутствует метод

person Ankur Singhal    schedule 20.11.2015

  1. Ключевое слово instanceof — это бинарный оператор, используемый для проверки того, является ли объект (экземпляр) подтипом данного типа.

  2. Это оператор, возвращающий true, если левая часть выражения является экземпляром имени класса в правой части.

Вся цель его наличия состоит в том, чтобы тестировать типы объектов перед выполнением каких-либо операций, специфичных для объекта, а то, что он двоичный, делает его очень простым. Метод тоже есть, но используется редко. Например, вы можете использовать его для написания метода, который проверяет, совместимы ли два произвольно типизированных объекта по присваиванию, например:

public boolean areObjectsAssignable(Object left, Object right) {
    return left.getClass().isInstance(right);
} 

Пожалуйста, обратитесь к этому вопросу для получения дополнительной информации,

оператор Java isInstance vs instanceOf

person Dish    schedule 20.11.2015

instanceof также проверяет, наследует ли Object данный класс. Итак, если у вас есть: public class Person extends Human, вы получите true, если напишете

Person p = new Person();
if(p instanceof Human)
person Gamemaker1998    schedule 20.11.2015