Java转换对象/字符串数组

Java转换对象/字符串数组,java,casting,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[]

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

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

请注意,这不会导致编译错误:

Object[] o = null;
String[] s = null;

s = (String[]) o;
对象[]
字符串[]
将给出不兼容的类型错误。

对象[]
字符串[]
将正常工作。

请注意,这不会导致编译错误:

Object[] o = null;
String[] s = null;

s = (String[]) o;
对象[]
字符串[]
将给出不兼容的类型错误。

Object[]
String[]
将正常工作。

它之所以失败,是因为它的错误是决定性的(即总是错误,也只能是错误的)

o
必须包含对象数组。这些永远不可能是字符串

在第一个示例中,可以将字符串数组类型化为对象

如果我们删除一个“数组嵌套”,就可以说明这一点。 考虑:

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

它之所以失败,是因为它是决定性的(也就是说,总是而且只能永远)错误

o
必须包含对象数组。这些永远不可能是字符串

在第一个示例中,可以将字符串数组类型化为对象

如果我们删除一个“数组嵌套”,就可以说明这一点。 考虑:

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

您不能从
对象[]
转换为
字符串[]
。您正在从
对象[]
强制转换为
字符串[]
第一个示例之所以有效,是因为
对象[]
对象
(所有对象都是
对象
)。请解释为什么要强制转换不同维度的数组。这显然不是很有意义。你不能将二维数组变成一维数组。
对象[]
不一定是一维的。它可以是你喜欢的任何维度。一个
对象[][][]
是一个
对象
,因此您的
对象[]
可以包含多个
对象[][][]
,使其成为六维。您不能从
对象[]
转换为
字符串[]
。您正在从
对象[]
强制转换为
字符串[]
第一个示例之所以有效,是因为
对象[]
对象
(所有对象都是
对象
)。请解释为什么要强制转换不同维度的数组。这显然不是很有意义。你不能将二维数组变成一维数组。
对象[]
不一定是一维的。它可以是你喜欢的任何维度。一个
对象[][][]
是一个
对象
,因此你的
对象[]
可以包含多个
对象[][]
,使其成为六维的。