学习 JAVA 源码笔记之 ArrayList 笔记 # c.toArray()

在 学习 JAVA ArrayList 源码时,看到 ArrayList 带参数的构造方法中有 

c.toArray might (incorrectly) not return Object[] (see 6260652)

一句这样的注释,不明白什么意思所以深入看了一下,原来是 Java 中的一个 BUG

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652直接贴代码吧!

public static void main(String[] args) {
    /**
     * java BUG: c.toArray might (incorrectly) not return Object[] (see 6260652)
     */

    List<String> stringList = new ArrayList();
    stringList.add("A");
    // 调用 ArrayList 中的 toArray() 方法会返回一个新的 Object[] 类型
    Object[] listArray = stringList.toArray(); // class [Ljava.lang.Object'
    listArray[0] = new Object();

/**************************************************************************/

    List<String> asList = Arrays.asList("A", "B");
    // 调用 Arrays 类中的 toArray() 方法,实际返回的是 Object 类型的引用,而实际类型还是 String 类型
    Object[] objects = asList.toArray(); // class [Ljava.lang.String;
    objects[0] = new Object(); // java.lang.ArrayStoreException
}

如上所示,同样都是调用的 toArray() 方法,但是它们之间的实现方式是有差别的。

第一种调用了 java.util.ArrayList 中的 toArray() 方法:

public Object[] toArray() {
    return Arrays.copyOf(elementData, size);
}

第二种调用了 java.util.Arrays 中的 toArray() 方法:

public Object[] toArray() {
    return a.clone();
}

具体的实现细节可以自行查看源码,本文只作为自己的学习笔记,以便日后复盘。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值