在下面的代码中,整数数组被分配给一个对象。如果可能,为什么我不能通过obj访问它们?代码编译,但我得到一个ClassCastException,我已经尝试将对象转换为String,我得到相同的错误
public class test
{ public static void main(String ab[])
{
Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
Integer[] i = (Integer[]) obj;
for( Integer c : i)
System.out.println(c);
}
}
答案 0 :(得分:2)
int[]
与Integer[]
不同。
您创建了int[]
:
Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
但是你会尝试将它强制转换回Integer[]
,这是你无法做到的,因为它是int[]
。 int[]
和Integer[]
都是Object
,但你不能像这样在两者之间施放,原因相同,例如,这不起作用:
Object obj = new String("");
File f = (File)obj; // obj is a String, will throw ClassCastException
相反,要么创建一个Integer[]
来开始:
Object obj = new Integer[] {1,2,3,4,5,6,7,8,9,10};
Integer[] i = (Integer[]) obj;
或使用int[]
:
Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
int[] i = (int[]) obj;
您尝试将int[]
投射到String
的情况也是如此。你无法通过在Java中转换它们来转换它们。
答案 1 :(得分:1)
这是因为你试图将int []类型的对象强制转换为Integer []类型的对象,这是不可能的,虽然Integer类可以包含int类型,在更高版本的java中你甚至可以赋值像这样的整数的int:
Integer a = 2;
他们是不同的。
如果您使用的是java 5或更高版本,则可以执行以下操作:
public class test
{ public static void main(String ab[])
{
Object obj = new Integer[] {1,2,3,4,5,6,7,8,9,10};
Integer[] i = (Integer[]) obj;
for( Integer c : i)
System.out.println(c);
}
}