将Object数组转换为Integer数组错误
下面的代码有什么问题?
Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a;
代码在最后一行有以下错误:
线程“main”中的exceptionjava.lang.ClassCastException:[Ljava.lang.Object; 不能投给[Ljava.lang.Integer;
Ross,你也可以使用Arrays.copyof()或Arrays.copyOfRange()。
Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class); Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);
这里碰到一个ClassCastException
的原因是你不能把一个Integer
数组当作一个Object
数组。 Integer[]
是Object[]
的子types,但Object[]
不是Integer[]
。
而下面也不会给出ClassCastException
。
Object[] a = new Integer[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a;
您不能将Object
数组转换为Integer
数组。 你必须遍历a的所有元素,并分别单独施放每个元素。
Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = new Integer[a.length]; for(int i = 0; i < a.length; i++) { c[i] = (Integer) a[i]; }
编辑:我相信这个限制背后的理由是,当投掷时,JVM希望确保在运行时types安全。 由于Objects
的数组可以是除了Integers
之外的任何东西,所以JVM将不得不做上面的代码做的事情(单独看每个元素)。 语言devise者决定他们不希望JVM做到这一点(我不知道为什么,但我相信这是一个很好的理由)。
但是,您可以将一个子types数组转换为超types数组(例如Integer[]
to Object[]
)!
或者执行以下操作:
... Integer[] integerArray = new Integer[integerList.size()]; integerList.toArray(integerArray); return integerArray; }
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
您尝试将一个对象数组转换为整型数组。 你不能这样做。 这种types的downcast是不允许的。
您可以创build一个Integer数组,然后将第一个数组的每个值复制到第二个数组中。
- 将Objective-C指针types'NSString *'转换为C指针types'CFStringRef'(又名'const struct __CFString *')需要一个桥接转换
- 在TypeScript中将数字转换为string
- 如果Chrome扩展程序未安装或使用隐身模式,则Google Chrome浏览器会投放发件人错误
- '是'与尝试投与空检查
- java:我怎么能做一个variables从一个types的dynamic铸造到另一个?
- 协变在C#
- Java Class.cast()与cast操作符
- 在.NET 2.0中将Cast List <int>转换为List <string>
- 在C#中从枚举中获取int值