栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么数组分配不兼容,即使它们的数据类型是兼容的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么数组分配不兼容,即使它们的数据类型是兼容的?

语言规范在Sec
4.10.3中
定义了数组类型之间的子类型化:

以下规则定义了数组类型之间的直接超类型关系:

  • 如果

    S
    T
    都是引用类型,则
    S[] >1 T[] iff S >1 T

  • Object >1 Object[]

  • Cloneable >1 Object[]

  • java.io.Serializable >1 Object[]

  • 如果

    P
    是原始类型,则:

    • Object >1 P[]

    • Cloneable >1 P[]

    • java.io.Serializable >1 P[]

最后的项目符号(“ If

P
是原始类型…”)表明该语言未定义不同原始类型的数组之间的任何关系。唯一有效的分配是:

byte[] bs = new byte[10];byte[] bs2 = bs;Object obj = bs;Cloneable cl = bs;Serializable ser = bs;

这没有提供 为什么
这样的答案。您必须要询问语言设计师。但是,像Eran所示的简单示例说明了为什么按照OP的建议这样做并不安全。

应该注意的是,第一行-允许类似

Object[] obj = new String[10];obj[0] = new Object();  // ArrayStoreException!

是一个设计错误:数组是协变的,因此它们不是类型安全的。这是强烈建议使用泛型而不是数组的原因之一,因为泛型是 不变的 ,因此可以防止此类分配。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号