为什么即使它引用数组,x也被认为是一个对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么即使它引用数组,x也被认为是一个对象?相关的知识,希望对你有一定的参考价值。
有人可以帮我理解这段代码吗?
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
类型变量,但是,我的困惑可能在于引用的概念。当我们说Object x = A
时,我们说x
引用了数组A
。但是,我的困惑在于x[1] = 1
。为什么x
被认为是Object
是错误的,即使它引用了一个数组?我认为[]
是一种只能在“数组”类中访问的方法吗?
答案
虽然我不会不必要地扔掉类型信息,但你可以使用Array#setInt(Object, int, int)
通过int[]
访问Object
。那是,
Array.setInt(x, 1, 1); // x[1] = 1;
会工作。
另一答案
arrays are objects
- 这意味着任何类型(引用或基元)的数组都是Object类的子类。
- 通过使用子类的父引用实例可以访问。因此,语句
Object x = A;
在语法上是正确的。 - 通过使用Child引用可以访问子相关的方法/实现。因此,语句
A[0] = 0;
在语法上是正确的。 - 通过使用父引用,无法访问子相关的方法/实现。因此,语句
x[1] = 1;
在语法上是不正确的。
以上是关于为什么即使它引用数组,x也被认为是一个对象?的主要内容,如果未能解决你的问题,请参考以下文章