int primitivI[] = {1,1,1};
Integer wrapperI[] = {2,22,2};
1. System.out.println(primitivI instanceof Object);//true
2. System.out.println(primitivI instanceof Object[]);//Compilation Error Why ????
3. System.out.println(wrapperI instanceof Object);//true
4. System.out.println(wrapperI instanceof Object[]);//true
这里我有两个整数(primitve,Wrapper)类型的数组,但我得到了不同的结果 instanceof运算符
请参阅第2和第4行
第4行将成功编译并给出结果为true但是在第2行的情况下,为什么会导致编译错误?
从第1行和第3行可以看出,两个数组是对象的实例,但在Object[]
的情况下,为什么这样做
结果有所不同?
答案 0 :(得分:1)
如果将RelationalExpression转换为ReferenceType将作为编译时错误被拒绝,则关系表达式的实例同样会产生编译时错误。在这种情况下,instanceof表达式的结果永远不会成立。
这意味着如果在编译时编译器知道X不能是实例Y,则表达式X instanceof Y
会产生编译时错误。
如果不尝试使用数组,您可以获得无法编译的更简单的示例:
String s = "dgd";
System.out.println(s instanceof Integer);
同样,您的第二个示例无法编译,因为int[]
无法转换为Object[]
。您的所有其他示例都会进行编译,因为primitivI
可以转换为Object
而wrapperI
可以转换为Object
和Object[]
。