有人可以帮我理解这段代码吗?
int[] A = new int[2];
Object x = A; // All references are Objects
A[0] = 0; // Static type of A is array...
x[1] = 1; // But static type of x is not an array: ERROR
根据Oracle Java SE站点:
在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2)。可以在数组上调用Object类的所有方法。
我知道可以将数组分配给Object
类型变量,但是,我的困惑可能在于 reference 的概念。当我们说Object x = A
时,我们说x
引用了数组A
。但是,我的困惑在于x[1] = 1
。为什么x
被认为是Object
,即使它引用了一个数组,也是一个错误?我认为[]
是一种只能在“数组”类中访问的方法吗?
答案 0 :(得分:1)
虽然我不会不必要地丢弃类型信息,但您可以使用Array#setInt(Object, int, int)
通过int[]
访问Object
。也就是说,
Array.setInt(x, 1, 1); // x[1] = 1;
会起作用。
答案 1 :(得分:1)
arrays are objects
- 这意味着任何类型(引用或基元)的数组都是Object类的子类。
Object x = A;
在语法上是正确的。A[0] = 0;
在语法上是正确的。x[1] = 1;
在语法上是不正确的。