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