在原始类型上使用instanceof方法的Java会产生编译错误

Nod*_*rov 0 java instanceof

我正在学习Java,我不明白为什么下面的代码没有编译而没有错误:

public class SecondClass{

public static void main(String[] args){
    int number = 45;
    if (number instanceof String) {
        System.out.println("Not a String!");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么我在条件操作中出错?本instanceof应该返回truefalse向右?在这种情况下,应该有false,因为number是一个int,但是这个代码不编译.

Jon*_*eet 6

JLS第15.20.2节开始:

instanceof运算符的RelationalExpression操作数的类型必须是引用类型或null类型; 否则,发生编译时错误.

在您的情况下,RelationalExpression操作数的情况是int,因此您得到编译时错误.

即使你有一个类型的表达式Integer,你也会遇到:

如果RelationalExpression与ReferenceType的强制转换(第15.16节)将作为编译时错误被拒绝,则instanceof关系表达式同样会产生编译时错误.在这种情况下,instanceof表达式的结果永远不会成立.