将char数组分配给int数组

zig*_*ggy 1 java arrays

有人可以解释为什么下面代码中的最后一个赋值无效

类ScjpTest扩展BounceObject实现Bouncable {

static int ac = 5;
static char ab = 'd';

static int[] a = new int[]{1,2,3};
static int[] b = new int[]{1,2,3};
static char[] c = new char[]{'a','b'};

public static void main(String[] args){  
    a = b;
    b = a;

    ac = ab;  //This is accepted
    a = c;    //This is rejected
}
Run Code Online (Sandbox Code Playgroud)

}

编译器抱怨以下错误

ScjpTest.java:10: incompatible types
found   : char[]
required: int[]
                a = c;
                    ^
1 error
Run Code Online (Sandbox Code Playgroud)

以下也被接受

class Animal{}
class Horse extends Animal{]

Animal[] animals = new Animal[2];
Horse[] horses = new Horses[2];

animals = horses;
Run Code Online (Sandbox Code Playgroud)

为什么我不能将char数组赋给int数组?

Hen*_*olm 8

因为语言规范禁止它.它在运行时工作以将String []视为Object [],因为它们在内存中具有相同的表示.但是char []和int []有不同的内存表示,如果int []上的每个操作都必须检查它是否真的是伪装的char [],那就慢得令人无法接受.

引用类型的数组必须对赋值进行运行时检查,以便知道是否抛出ArrayStoreException,但至少从它们读取与元素类型无关.