码迷,mamicode.com
首页 > 其他好文 > 详细

Array和ArrayList的Clone为什么一个不用类型转换,一个要类型转换

时间:2018-03-11 14:35:06      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:alt   除了   pos   对象   情况   origin   ima   div   bsp   

技术分享图片

通过上面一段代码可以看出Array的Clone()不用进行类型转换,但ArrayList的Clone要进行类型转换。为什么会出现这种情况呢?我们来分析下源码

现在来看下Array的Clone()方法源码

技术分享图片

发现Array里没有Clone()方法,调用的都是Object里的方法

技术分享图片

这里面的除了Object并不是说Object就不遵守这个惯例,而是Object就是这个惯例的源头,它是一定遵守的,那么就可以得出结论

Array调用Clone是不用类型转换的。

那么为什么ArrayList就要呢?我们来看下ArrayList里的Clone()方法

技术分享图片

调用super的Clone方法,好像也没有问题,但问题在下面一行Arrays的copyOf()方法,我在看下copyOf()方法

 技术分享图片

发现,这里需要original的类型,那么original的类型又是什么呢?我们回到上面看clone(),original对应参数elementData对象,那么elementData是什么类型呢?

技术分享图片

通过这个可以看出,elementData是Object类型,original也是Object类型,通过copyOf方法返回的也是一个Object对象,所以我们得出结论

ArrayList返回的是一个Object对象,该Object使系统无法识别具体类型,所以要进行类型转换。

Array和ArrayList的Clone为什么一个不用类型转换,一个要类型转换

标签:alt   除了   pos   对象   情况   origin   ima   div   bsp   

原文地址:https://www.cnblogs.com/y-z-x/p/8543466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!