千家信息网

JDK1.6集合框架中6260652bug库是怎样的

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关JDK1.6集合框架中6260652bug库是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近在看JDK的源码:C
千家信息网最后更新 2026年10月31日JDK1.6集合框架中6260652bug库是怎样的

今天就跟大家聊聊有关JDK1.6集合框架中6260652bug库是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

最近在看JDK的源码:CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话看不懂。

public ArrayList(Collection c) { elementData = c.toArray(); size = elementData.length; // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class)   elementData = Arrays.copyOf(elementData, size, Object[].class); }  public CopyOnWriteArrayList(Collection c) { Object[] elements = c.toArray(); // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elements.getClass() != Object[].class)   elements = Arrays.copyOf(elements, elements.length, Object[].class); setArray(elements); }

上网查了一下资料,才知道see 6260652 这个编号代表JDK bug库中的编号。可以去官网查看bug详情
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6515694
6260652 和6515694这2个bug,貌似是同一个问题。这个bug是什么意思呢?我们先来看看一些测试代码:

public static void test1() {   SubClass[] subArray = {new SubClass(), new SubClass()};   System.out.println(subArray.getClass());    // class [Lcollection.SubClass;   BaseClass[] baseArray = subArray;   System.out.println(baseArray.getClass());    // java.lang.ArrayStoreException   baseArray[0] = new BaseClass(); }  public static void test2() {   List list = Arrays.asList("abc");    // class java.util.Arrays$ArrayList   System.out.println(list.getClass());    // class [Ljava.lang.String;   Object[] objArray = list.toArray();   System.out.println(objArray.getClass());    objArray[0] = new Object(); // cause ArrayStoreException }  public static void test3() {   List dataList = new ArrayList();   dataList.add("one");   dataList.add("two");    Object[] listToArray = dataList.toArray();    // class [Ljava.lang.Object;返回的是Object数组   System.out.println(listToArray.getClass());   listToArray[0] = "";   listToArray[0] = 123;   listToArray[0] = new Object();    }

1、关于test1()

SubClass 继承自BaseClass,由于SubClass数组中每一个元素都是SubClass对象,所以BaseClass[] baseArray = subArray;这种强制类型转换不会报错。这其实就是java对象的向上转型,子类数组转换成父类数组是允许的。但是由于数组中元素类型都是SubClass类型的,所以 baseArray[0] = new BaseClass();会报错java.lang.ArrayStoreException。这也就是说假如我们有1个Object[]数组,并不代表着我们可以将Object对象存进去,这取决于数组中元素实际的类型。

2、关于test2()

List list = Arrays.asList("abc");需要注意,可以知道返回的实际类型是java.util.Arrays$ArrayList,而不是ArrayList。我们调用

Object[] objArray = list.toArray();返回是String[]数组,所以我们不能将Object对象,放到objArray数组中。

3、关于test3()

ArrayList对象的toArray()返回就是Object[]数组,所以我们可以将任意对象存放到返回的Object[]数组中。

通过test2和test3可以看出,如果我们有1个List stringList对象,当我么调用Object[] objectArray = stringList.toArray();的时候,objectArray 并不一定能够放置Object对象。这就是源码中的注释:c.toArray might (incorrectly) not return Object[] (see 6260652)。为了考虑这种情况,所以源码中进行了if判断,来防止错误的数组对象导致异常。Arrays.copyOf(elementData, size, Object[].class);这个方法就是用来创建1个Object[]数组,这样数组中就可以存放任意对象了。

看完上述内容,你们对JDK1.6集合框架中6260652bug库是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

数组 对象 类型 就是 元素 内容 源码 框架 代表 实际 注释 一句话 也就是 也就是说 代码 函数 取决于 子类 情况 意思 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技创新与互联网经济 互联网科技有限公司经营范围 互联网和科技创新 科技服务与互联网 华宇互联网科技 碳银互联网科技有限公司 广州善班互联网科技 国外互联网科技网站 佰商互联网科技有限公司 互联网科技股有哪些 科技伦理 互联网公司 互联网金融科技公司干啥的 互联网金融中的现代科技 宁夏科技产业互联网案例 电子科技大学互联网创业大赛 天津腾达互联网科技有限公司 互联网方面的科技前沿 山东星卡互联网科技有限公司官网 互联网科技数字货币 广州有谷有贝互联网科技有限公司 咖啡豆 百单网互联网科技有限公司 上海喔噻互联网科技有限公司 科技互联网项目 深圳卡尔迅互联网科技有限公司怎么样 太原新华互联网科技学校怎么样 须眉科技是互联网公司吗 阿里巴巴算科技企业还是互联网 银川新华互联网科技职业技术培训学校图片 陕西云淼互联网科技公司
0