java – 为什么数组赋值不兼容,即使它们的数据类型是?
byte b =10; int a = b; // Primitive data type widening // Works perfectly fine 上面的代码不会给出任何错误/警告.但为什么同样不适用于下面提到的代码? byte[] b = new byte[10]; int[] i1 = b; //Cannot convert from byte[] to int[] int[] i2 = new byte[10]; //Cannot convert from byte[] to int[] 我的问题是,因为int可以保存任何和所有字节值,为什么这不是数组的情况? 他们都在拿着地址.如果这对于ref变量是可能的,那么这将是向上的. 解决方法
语言规范定义了
Sec 4.10.3中数组类型之间的子类型:
最后的项目符号(“如果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! 是一个设计错误:数组是协变的,使它们不是类型安全的.这是强烈偏好泛型到数组的一个原因,因为泛型是不变的,因此阻止了这样的赋值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |