有人可以解释为什么下面代码中的最后一个赋值无效
类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数组?
因为语言规范禁止它.它在运行时工作以将String []视为Object [],因为它们在内存中具有相同的表示.但是char []和int []有不同的内存表示,如果int []上的每个操作都必须检查它是否真的是伪装的char [],那就慢得令人无法接受.
引用类型的数组必须对赋值进行运行时检查,以便知道是否抛出ArrayStoreException,但至少从它们读取与元素类型无关.
| 归档时间: |
|
| 查看次数: |
2214 次 |
| 最近记录: |