考虑以下代码:
ArrayList<Double> list1 = new ArrayList<>();
list1.add(1.5);
list1.add(2.5);
list1.add(3.5);
ArrayList<Double> list2 = (ArrayList<Double>)list1.clone();
Date[] list3 = {new Date(), new Date(4664316)};
Date[] list4 = list3.clone();
int[] list5 = {1, 2};
int[] list6 = list5.clone();
为什么list.clone()需要强制转换,而list3.clone()和list5.clone()不需要强制转换?我知道数组和ArrayList之间的区别,但不确定原因。
答案 0 :(得分:3)
请阅读documentation。
请注意,所有数组都被认为实现了Cloneable接口,并且数组类型T []的clone方法的返回类型是T [],其中T是任何引用或基本类型。
但是在ArrayList中,返回一个Object,因此需要进行强制转换。
答案 1 :(得分:0)
Clone()方法签名返回一个对象类型。
按照惯例,此方法返回的对象应独立于此对象(正在克隆)
因此演员阵容是必需的。
数组行为不同,返回正确类型的克隆数组。所以不需要铸造。