Почему в Java instanceof
является ключевым словом, а не методом?
public static void main(String args[]) {
Simple1 s = new Simple1();
System.out.println(s instanceof Simple); // true
}
Почему в Java instanceof
является ключевым словом, а не методом?
public static void main(String args[]) {
Simple1 s = new Simple1();
System.out.println(s instanceof Simple); // true
}
Вот есть метод Class.isInstance
... но в основном это операция более низкого уровня, которая имеет поддержку конкретной виртуальной машины, поэтому имеет смысл использовать ее как оператор. Помимо всего прочего, для выполнения теста нет реальной необходимости получать ссылку Class
— байт-код может представлять операцию более эффективно.
Обратите внимание, что вы можете сделать то же самое для множества операторов... зачем нам нужны арифметические операторы, а не вызов int x = Integer.add(y, z);
, например? Есть преимущества как с точки зрения удобства, так и с точки зрения производительности (последнюю из которых умная JIT, конечно, может удалить) от наличия операторов.
«instanceof» — это оператор в Java, который используется для сравнения объекта с указанным типом. Он предоставляется как оператор, чтобы вы могли писать более четкие выражения.
Также isInstance присутствует метод
Ключевое слово instanceof
— это бинарный оператор, используемый для проверки того, является ли объект (экземпляр) подтипом данного типа.
Это оператор, возвращающий true, если левая часть выражения является экземпляром имени класса в правой части.
Вся цель его наличия состоит в том, чтобы тестировать типы объектов перед выполнением каких-либо операций, специфичных для объекта, а то, что он двоичный, делает его очень простым. Метод тоже есть, но используется редко. Например, вы можете использовать его для написания метода, который проверяет, совместимы ли два произвольно типизированных объекта по присваиванию, например:
public boolean areObjectsAssignable(Object left, Object right) {
return left.getClass().isInstance(right);
}
Пожалуйста, обратитесь к этому вопросу для получения дополнительной информации,
оператор Java isInstance vs instanceOf
instanceof
также проверяет, наследует ли Object
данный класс. Итак, если у вас есть: public class Person extends Human
, вы получите true
, если напишете
Person p = new Person();
if(p instanceof Human)