public class Type1 {
public static void main(String[] args) {
String s = null;
System.out.println(s instanceof String);
}
}
Тут все просто. Оператор instanceof определен так, чтобы возвращать false, когда его левый операнд null. Этим многие пользуются, чтобы не делать дополнительных проверок на null.
public class Type2 {
public static void main(String[] args) {
System.out.println(new Type2() instanceof String);
}
}
Тут задачка посложнее и я пропустил тот факт, что оператор instanceof требует, чтобы оба операнда имели такой тип, чтобы один был подтипом другого. А программа не скомпилится.
public class Type3 {
public static void main(String[] args) {
Type3 value = (Type3) new Object();
}
}
Опять подколка. После предыдущей задачи можно решить, что программа не скомпилится. Так оно и было бы, если бы создавался объект типа String. Но в программе создается Object, наследником которого являются все классы, включая Type3. Однако, при попытке выполнения произойдет исключение ClassCastException.
Комментариев нет:
Отправить комментарий