我要遍历代码的一部分,其中当我无法理解时,必须将不同的数据类型明确地用大小写类型转换为object
类型,反之亦然如何完成这样的事情:
(Object[])obj; //Casting an Object variable into and Object[]
我尝试对所有其他内置和基元执行相同的操作。这是行不通的。
(String[])str; //Gives the error cannot cast from string to string[]
(int[])i; //Gives the error cannot cast from int to int[]
(char[])ch; //Gives the error cannot cast from char to char[]
(long[])l; //Gives the error cannot cast from long to long[]
(Integer[])in; //Gives the error cannot cast from int to Integer[]
其中str是
string
类型的a,i和in是int
类型的,ch是 类型char
,l是类型long
。
然后如何允许它,以及当我们这样做时内部如何实现
(Object[])obj;
?
这里obj
的类型为Object
答案 0 :(得分:4)
任何实例也是一个对象。
例如数组。
一个字符串数组...是一个对象。
一个对象数组...是一个对象。
因此,当实际对象是这样的数组时,可以回退。
但是:字符串数组绝不是字符串。因此,该转换不起作用!
在代码中:
String[] strings = { "a", "b", "c" };
Object obj = strings;
第二行有效是因为可以将“对象”中的任何内容赋给对象变量。并且由于obj
实际上是 引用字符串数组,因此您可以回退:
String[] anotherVariablePointingToTheSameArray = (String[]) obj;
请紧记:该强制转换只有一个含义:您比编译器更了解。您知道“某事”实际上(在运行时)更具体。
换句话说:如果(X) y
返回true,则只能进行y instanceOf(X)
强制转换!