【发布时间】:2018-06-10 21:25:45
【问题描述】:
谁能帮我理解这段代码?
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 是一个错误,即使它引用了一个数组?我是否认为[] 是一种只能在“数组”类中访问的方法?
【问题讨论】:
-
虽然数组确实是对象,但并非所有对象都是数组。因此,如果它是一个数组,编译器将不允许您像数组一样进行索引。
-
你需要了解变量类型和引用类型的区别。编译器只知道x是一个Object,不多也不少。
-
@HovercraftFullOfEels 所以你的意思是因为
Object x没有被定义为一个对象,所以它被认为是一个变量?因此,当我定义Object x = A时,这是一个变量赋值而不是引用? -
什么?抱歉,我无法解析,因为您上面的陈述非常令人困惑和困惑。您需要研究什么是变量以及什么是引用,因为这些是您必须了解的关键概念。变量是赋值左边的东西。
-
Language Basics,特别是注意变量和对象。
标签: java arrays dynamic reference static