2

我正在准备入门级 Oracle 认证 - OCA - Java Programmer I,因为他们要求人们在参加下一个之前先参加这个(以前可以直接参加 SCJP,相当于 OCP - Java Programmer二)

我在数组初始化时遇到了这个问题,这让我有点困惑。显然,可以像这样声明和初始化一个数组:

Object[] objects = { new Object[1], new Object[34] };

由于数组是对象,您可以将对象数组粘贴到对象数组中。objects[0]您可以通过执行或objects[1]从那里轻松获得一个或另一个对象数组?你将如何从存储在下面的对象数组中访问第 16 个对象objects[1]

基本上,我的问题可以简化为:

Object o = new Object[100];

以上编译。但是,如何访问 Object 数组中的单个对象o

4

2 回答 2

10

AnObject[]也是 an Object,这就是为什么你的声明

Object o = new Object[100];

作品。*但是,要访问这些元素,您需要将其转换回Object[]. 例如:

Object elt = ((Object[]) o)[3];

对于您的原始声明:

Object[] objects = { new Object[1], new Object[34] };

你将不得不做类似的事情来访问第 16 个元素objects[1]

Object elt = ((Object[]) (objects[1]))[15];

当然,您可以通过声明来避免所有这些转换:

Object[][] objects = { new Object[1], new Object[34] };

首先。然后你就可以做objects[1][15]

*请注意,这仅适用于Object,它在 Java 中作为对象层次结构的根具有特殊地位。Integer[]不能将An分配给Integer变量。

于 2013-03-19T15:50:08.790 回答
5

您必须将其转换回Object[]

    Object o = new Object[] {new String("abc"), null, new Integer(1)};
    Object[] arr = (Object[]) o;
    Object elem = arr[0];
    System.out.println(elem);

这打印abc

它之所以有效,是因为System.out.println()很高兴接受Object. 如果它需要一个String,你需要另一个沮丧。

于 2013-03-19T15:49:53.133 回答