Java 为什么我能';t使用;instanceof";对于Int和Integer的比较数组?
为什么这段代码会抛出编译错误Java 为什么我能';t使用;instanceof";对于Int和Integer的比较数组?,java,arrays,Java,Arrays,为什么这段代码会抛出编译错误 Integer[] arr = new Integer[3]; if (arr instanceof Integer) { System.out.println("true"); } arr是一个对象,同时Integer是一个对象。为什么我不能将它们与的实例进行比较?整数[]与整数不同。它们是两个完全不同的类:通过检查Integer[].class==Integer.class,可以看到这一点,这将产生false 这并不奇怪:一个是数组类型,另一个不是。
Integer[] arr = new Integer[3];
if (arr instanceof Integer) {
System.out.println("true");
}
arr是一个对象,同时Integer是一个对象。为什么我不能将它们与
的实例进行比较?整数[]
与整数
不同。它们是两个完全不同的类:通过检查Integer[].class==Integer.class
,可以看到这一点,这将产生false
这并不奇怪:一个是数组类型,另一个不是。您可以对整数调用Integer.intValue()
,对整数[]
调用Integer.length
,但不能调用Integer.length
或Integer[].intValue()
此外,这两个类唯一常见的超类型是对象
,因此整数
引用无法存储整数[]
,反之亦然。整数[]
与整数
不同。它们是两个完全不同的类:通过检查Integer[].class==Integer.class
,可以看到这一点,这将产生false
这并不奇怪:一个是数组类型,另一个不是。您可以对整数调用Integer.intValue()
,对整数[]
调用Integer.length
,但不能调用Integer.length
或Integer[].intValue()
此外,这两个类唯一常见的超类型是Object
,因此Integer
引用无法存储Integer[]
,反之亦然
JLS 15.20.2。类型比较运算符instanceof
如果引用类型的关系表达式的强制转换(§15.16)将作为编译时错误被拒绝,那么关系表达式的实例同样会产生编译时错误。
其中instanceof
的使用是
if (RelationalExpression instanceof ReferenceType)
由于Integer
和Integer[]
之间的强制转换失败,因为两者都不是另一个的子类型(它们的常见超类型是Object
),instanceof
给出了一个复杂的错误
不兼容的条件操作数类型Integer[]和Integer
JLS 15.20.2。类型比较运算符instanceof
如果引用类型的关系表达式的强制转换(§15.16)将作为编译时错误被拒绝,那么关系表达式的实例同样会产生编译时错误。
其中instanceof
的使用是
if (RelationalExpression instanceof ReferenceType)
由于Integer
和Integer[]
之间的强制转换失败,因为两者都不是另一个的子类型(它们的常见超类型是Object
),instanceof
给出了一个复杂的错误
不兼容的条件操作数类型Integer[]和Integer
非常感谢你的回答。我知道,整数[]和整数不一样。但我误解了“instanceof”的工作原理。现在我明白了!!!非常感谢你的回答。我知道,整数[]和整数不一样。但我误解了“instanceof”的工作原理。现在我明白了!!!谢谢!正是我想知道的!谢谢!正是我想知道的!