为什么此代码会抛出编译错误?
Setup.hs
arr 是一个对象,同时整数是一个对象。为什么我无法将它们与Integer[] arr = new Integer[3];
if (arr instanceof Integer) {
System.out.println("true");
}
进行比较?
答案 0 :(得分:3)
Integer[]
与Integer
不同。它们是两个完全不同的类:您可以通过选中Integer[].class == Integer.class
来看到这一点,这将产生false
。
这不应该令人惊讶:一个是数组类型,另一个是不是。您可以在Integer.intValue()
上调用Integer
,在Integer[].length
调用Integer[]
,但不能Integer.length
或Integer[].intValue()
。
此外,这两个类的唯一常见超类型是Object
,因此Integer
引用无法存储Integer[]
,反之亦然。
答案 1 :(得分:2)
JLS 15.20.2。类型比较运算符
The application is incorrectly configured. Check that the package name and signing certificate match the client ID created in Developer Console. Also, if the application is not yet published, check that the account you are trying to sign in with is listed as a tester account. See logs for more information.
如果 RelationalExpression 对 ReferenceType 的强制转换(第15.16节)作为编译时错误被拒绝,那么
instanceof
关系表达式同样会产生编译时错误。
使用instanceof
instanceof
由于if (RelationalExpression instanceof ReferenceType)
和Integer
之间的强制转换失败,因为它们都不是另一个的子类型(它们的常见超类型是Integer[]
),Object
会出现并发错误
不兼容的条件操作数类型Integer []和Integer。