从类Object的对象访问整数

时间:2014-11-26 04:46:03

标签: java arrays object int

在下面的代码中,整数数组被分配给一个对象。如果可能,为什么我不能通过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);       
  }
}

2 个答案:

答案 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);       
  }
}