时间:2021-05-20
最近在看JDK的源码:CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话看不懂。
上网查了一下资料,才知道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是什么意思呢?我们先来看看一些测试代码:
1、关于test1()
SubClass 继承自BaseClass,由于SubClass数组中每一个元素都是SubClass对象,所以BaseClass[] baseArray = subArray;这种强制类型转换不会报错。这其实就是java对象的向上转型,子类数组转换成父类数组是允许的。但是由于数组中元素类型都是SubClass类型的,所以 baseArray[0] = new BaseClass();会报错java.lang.ArrayStoreException。这也就是说假如我们有1个Object[]数组,并不代表着我们可以将Object对象存进去,这取决于数组中元素实际的类型。
2、关于test2()
List<String> 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<String> 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[]数组,这样数组中就可以存放任意对象了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
JDK1.6官方下载_JDK6官方下载_JDK1.6API(chm)下载_JDK6APICHM中文参考下载_JDK1.6下载_JDK6下载ftp://202.1
问题描述本来使用的是jdk1.8,由于其他原因需要使用jdk1.6,在安装完jdk1.6后打开eclipse就会报错:Version1.6.0_43oftheJ
简介NashornNashorn一个javascript引擎。从JDK1.8开始,Nashorn取代Rhino(JDK1.6,JDK1.7)成为Java的嵌入式
这里记录Java中从控制台读入信息的几种方式,已备后查!(1)JDK1.4(JDK1.5和JDK1.6也都兼容这种方法)publicclassTestConso
java.util.concurrent.ScheduledThreadPoolExecutor是JDK1.6之后自带的包,功能强大,能实现定时器和延时加载的功