Java - null instanceof Object的计算结果为true和false

Inf*_*teh 51 java instanceof

当我编译并运行此代码时:

public class Testing {
    public static void main(String... args) {
        Object obj = null;
        if (obj instanceof Object) {
            System.out.println("returned true"); 
        } else {
            System.out.println("returned false"); 
        }
        System.out.println(" " + obj instanceof Object);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在命令行上看到了这个:

C:\Users\xxxxxx\Desktop>java Testing
returned false
true
Run Code Online (Sandbox Code Playgroud)

不应该"null instanceof someType"总是返回false?

MBy*_*ByD 102

这个:

" " + obj instanceof Object
Run Code Online (Sandbox Code Playgroud)

被评估为:

(" " + obj ) instanceof Object
Run Code Online (Sandbox Code Playgroud)

并且" " + obj确实是一个非空字符串,它是一个实例Object.

  • 这是一个很好的教训,"当运算符优先级不明显时,更多的parens优于更少的parens." `""+(obj instanceof Object)`会打印出你期望的值. (23认同)
  • @FabianBarney是的,但运算符优先级比一般情况下更适用于这种情况(当然,`String.valueOf`也是如此).例如,也许你想输出调试信息,"obj是一个Foo?"+ obj instanceof Foo`.布尔逻辑是另一个很好的例子:`a ||是什么 b?c:d`是什么意思?是(a || b)吗?c:d`或`a || (b?c:d)`?Parens(或者更好的是,命名为vars!)使代码变得不那么棘手. (3认同)
  • 好点子.这是一种反直觉行为,你可以在Joshua Block和Neal Gafter的_Java Puzzlers中学习. (2认同)
  • 如果你自己得到它甚至更好:) (2认同)