gpt4 book ai didi

java - 数组转换问题

转载 作者:行者123 更新时间:2023-12-02 08:38:06 25 4
gpt4 key购买 nike

我有以下代码:

String []d=new String[]{"y","z"};
Object []ab=d;
d=(String[]) ab;
System.out.println(d[0]);
System.out.println(ab[0]);

预期返回y两次

但是下面的代码会抛出 java.lang.ClassCastException (这里 fileList 是一个 ArrayList<File> 对象)

File[] loadedFiles=new File[fileList.size()];
Object[] toArray = fileList.toArray();
loadedFiles=(File[]) toArray;
System.out.println(toArray[0]);
System.out.println(loadedFiles[0]);

虽然以下内容不会抛出任何内容:

loadedFiles=fileList.toArray(new File[0]);

Javadoc 1.5说(关于 toArray() ):

The returned array will be "safe" in that no references to it are maintained by this collection. (In other words, this method must allocate a new array even if this collection is backed by an array). The caller is thus free to modify the returned array.

那么为什么我不能通过强制转换来修改数组类型呢?

谢谢!

最佳答案

So why can't I modify the array type by casting?

转换永远不会改变实际对象的类型。它只是检查所讨论的引用是否是对适当类型的对象的引用,并允许您将该引用“用作”新类型。

现在,toArray 的值引用的数组是一个 Object[],而不是 File[]。您可以通过打印 toArray.getClass() 自行验证这一点。因此您无法将其转换为 File[]

您可以调用一个重载,该重载采用一个数组,此时它将执行正确的操作:

Object[] toArray = fileList.toArray(new File[0]);

此时,toArray 将引用 File[] 的实例,因此当您稍后转换它时,一切都很好。

关于java - 数组转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21170915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com