Nir*_*ati 7 java arrays scjp object instanceof
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
Run Code Online (Sandbox Code Playgroud)
这里我有两个整数(primitve,Wrapper)类型的数组,但我对instanceof运算符有不同的结果
看到第2行和第4行第4行将成功编译并给出结果为true但是在第2行的情况下,为什么会导致编译错误?从第1行和第3行可以清楚地看出,这两个数组是对象的实例,但如果是Object[]
,为什么结果会有所不同?
如果 RelationalExpression 到 ReferenceType 的强制转换会因编译时错误而被拒绝,则关系表达式的 instanceof 同样会产生编译时错误。在这种情况下,instanceof 表达式的结果永远不可能为真。
这意味着如果在编译时编译器知道 X 不能是 Y 的实例,则表达式X instanceof Y
将给出编译时错误。
您可以获得无法编译的更简单的示例,而无需尝试使用数组:
String s = "dgd";
System.out.println(s instanceof Integer);
Run Code Online (Sandbox Code Playgroud)
同样,您的第二个示例无法编译,因为int[]
无法转换为Object[]
. 所有其他示例都会编译,因为可以primitivI
强制转换为Object
and 。wrapperI
Object
Object[]