java - 为什么数组赋值不兼容,即使它们的数据类型是兼容的?

标签 java pointers casting pass-by-reference

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/

相关文章:

java - Unescape String 不起作用,它只能删除 “escape”

java - 获取文件持续时间谷歌应用云存储服务器

c - 调试时指针分配不起作用

c++ - 在 C++ 中作为参数传递时变量何时被复制?

c++ - float 减少 1

casting - 如何将一片无符号整数转换为相同大小的有符号整数?

java - 从 Java 调用 Powershell 会无限执行

java - 为什么 minHeight 属性在 WebView Android 中不起作用?

调用 malloc() 会覆盖静态表

java - 将列表转换为数组时抛出异常