为什么我需要在Java中重铸从对象数组中访问的整数数组?
我有下面的代码生成一个对象数组,并将两个整数数组传递给它。然后,我想将另一个整数数组变量设置为对象数组中的一个数组 但是,除非执行(int[])类型转换步骤,否则会出现错误。为什么我需要执行此重播?我假设对象中的数组是int[],因为它们是这样传递的为什么我需要在Java中重铸从对象数组中访问的整数数组?,java,arrays,object,Java,Arrays,Object,我有下面的代码生成一个对象数组,并将两个整数数组传递给它。然后,我想将另一个整数数组变量设置为对象数组中的一个数组 但是,除非执行(int[])类型转换步骤,否则会出现错误。为什么我需要执行此重播?我假设对象中的数组是int[],因为它们是这样传递的 public class test { public static void main(String[] args){ int[] arr1 = {1,2,3,4}; int[] arr2 = {4,5,
public class test {
public static void main(String[] args){
int[] arr1 = {1,2,3,4};
int[] arr2 = {4,5,6};
Object[] x = {arr1, arr2};
int[] left =(int[]) x[0];
for (int element : left){
System.out.println(element);
}
}
}
x是一个对象数组 因此,该数组的一个元素是对象 x[0]是一个对象
它也是int[]不是语言所知道的。一袋物品可以让你把几乎任何类型的东西放进袋子里,但袋子不必记住每件东西的具体类型。当你把一个东西从袋子里拿出来的时候,你所知道的只是它是一个对象,因为袋子被声明为持有这个对象。对象类是Java中所有类的超类。因此,当您将int数组传递给对象类型时,它将作为对象类型接收。现在,对象数组有两个对象元素。毫无疑问,它们也是整数。但是对于变量x,它们是对象 现在,在检索元素时,需要将其转换为int,因为它们是x的对象
您可以将任何子类对象引用到其超类引用。但是,当您将再次从其超类引用中检索子类对象时,您需要强制转换它。因为您的超类引用不知道它的哪个子类类型 这段代码应该可以回答您的问题
public static void main(String[] args) {
int[] arr1 = { 1, 2, 3, 4 };
String[] arr2 = { "a", "b", "c" };
Object[] x = { arr1, arr2 };
int[] left = (int[]) x[0];
for (int element : left) {
System.out.println(element);
}
}
当您将arr1、arr2推入另一个Object[]类型的数组时,编译器不会假定Object[]x数组中的元素类型,因为它可以接受任何类型的数组。这就是为什么编译器强制您从Object[]array x强制转换使用的元素。首先,让我解释一下java的一些要点:
- java是java中所有对象的母亲
- Java具有称为自动装箱和自动取消装箱的功能
Object[]x={arr1,arr2};
分配此参数时,java编译器将:
- 自动将自动装箱arr1、arr2转换为整数[](包装器之一)
- 然后,由于Object是java中所有对象的母亲,它只需将整数[]转换为Object[]
希望这对您有所帮助
arr1
和arr2
属于int[]
类型,但是当您将它们存储在Object[]
类型的数组中时,会隐藏它们的真实类型。您可以将x
声明为int[][]
类型,则不需要强制转换。