最近比较闲,就看看jdk的部分源码,其实这也是我第一次正经的去阅读源码,我在看到arrayList源码的地方,有个注释我就觉得很有意思,来看一下:
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array.
this.elementData = EMPTY_ELEMENTDATA;
}
}
c.toArray might (incorrectly) not return Object[] (see 6260652)
这个我就很奇怪了, c.toArray()错误返回是什么吗?感觉发现来新大陆,后面的see 6260652
是指jdk的bug库,我们可以去详细的看一下:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652
在这里解释了这个问题,感觉挺有意思的,下面还说这个bug是可以复现的,不妨来试一试:
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.*;
public class ToArray
{
public static void main(String[] args)
{
List l = Arrays.asList(args);
System.out.println(l.toArray());
System.out.println(l.toArray(new Object[0]));
}
}
网友评论