我正在玩Java以了解它是如何工作的但我对某种类型的铸件有些怀疑。请考虑以下代码:
String[][] s = null;
Object[] o = null;
o = (Object[][]) s; // compile-time correct
现在,请考虑以下示例:
Object[][] o = null;
String[] s = null;
s = (String[]) o; // compile-time error: Cannot cast from Object[] to String[]
为什么会这样?我很困惑。
答案 0 :(得分:2)
请注意,这并没有给出编译错误:
Object[] o = null;
String[] s = null;
s = (String[]) o;
Object[][]
到String[]
会出现不兼容的类型错误
Object[]
到String[]
将正常工作。
答案 1 :(得分:1)
它失败了,因为它确定性地(即永远只能)是错误的。
o
必须包含对象数组。这些绝不是字符串。
你拥有的第一个样本,可以输入一个String数组作为对象。
如果我们删除"数组嵌套"我们可以说明这一点。 考虑:
String[] myStringArray = null; //instantiation not important
Object someObj = myStringArray; //no problem since arrays are Objects
你在第二个例子中所做的事情相当于
Object[] myObjectArray = null; //instantiation not important
String someString = myObjectArray; //compile time error, since an Object[] is never a String