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 变量是可能的,这将是向上转换。
最佳答案
new byte[10]
创建的数组可以包含 10 个 byte
值。如果您能够将它分配给 int[]
类型的变量,编译器会(错误地)假定您的 byte
数组可以包含 10 个 int
值。
考虑以下无效代码:
byte[] b = new byte[10];
b[0] = 10000; // too large for byte
以及以下有效的代码:
int[] i2 = new int[10];
i2[0] = 10000;
如果 int[] i2 = new byte[10];
有效,编译器将允许您将 int
存储在 类型的变量中字节
.
关于java - 为什么数组赋值不兼容,即使它们的数据类型是兼容的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50734617/