与String和实例混淆

时间:2014-03-07 04:55:46

标签: java scjp

我对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

感谢提前。

2 个答案:

答案 0 :(得分:8)

instanceof运算符不测试变量的声明类型;它测试变量引用的对象类(如果有的话)。但是,sstr在您的代码中都是nullnull永远不是任何类的实例。如果您将s和/或str设置为实际字符串,则输出会相应更改。

答案 1 :(得分:1)

JavaDoc

  

instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例。

检查创建类的新实例

 String str = new String();