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

时间:2015-09-05 21:06:24

标签: 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!");
    }
  }
}

为什么我在条件操作中出错? instanceof应该返回truefalse吗?在这种情况下,应该false,因为numberint,但此代码无法编译。

1 个答案:

答案 0 :(得分:6)

来自section 15.20.2 of the JLS

  

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

在您的情况下,RelationalExpression操作数的大小写为int,因此您会收到编译时错误。

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

  

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