Я не понимаю, как работает instanceof. Насколько я понимаю, instanceof - это проверка типа объекта. Строка является объектом, но в следующей программе она не совпадает. Пожалуйста, объясните мне.

public class MyTest
{
    static String s;
    public static void main(String args[])
    {
        String str = null;

        if(s instanceof String)
        {
            System.out.println("I am true String");
        }
        else 
        {
            System.out.println("I am false String");
        }
        if(str instanceof String)
        {
            System.out.println("I am true String");
        }
        else 
        {
            System.out.println("I am false String");
        }
    }    
}


The output is 

I am false String
I am false String

Спасибо заранее.

3
T8Z 7 Мар 2014 в 08:55

2 ответа

Лучший ответ

Оператор instanceof не проверяет объявленный тип переменной; он проверяет класс объекта (если есть), на который ссылается переменная. Однако и s, и str являются null в вашем коде, а null никогда не является экземпляром какого-либо класса. Если вы установите s и / или str на фактическую строку, то вывод изменится соответствующим образом.

8
Ted Hopp 7 Мар 2014 в 04:57

JavaDoc

Оператор instanceof сравнивает объект с указанным типом. Вы можете использовать его, чтобы проверить, является ли объект экземпляром класса, экземпляром подкласса или экземпляром класса, реализующего определенный интерфейс.

Проверить с созданием нового экземпляра класса

 String str = new String();
1
Nambi 7 Мар 2014 в 04:59