Java转换对象/字符串数组

时间:2016-07-12 20:55:24

标签: java casting

我正在玩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[]

为什么会这样?我很困惑。

2 个答案:

答案 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