这是初始化数组的合法方法.但是我如何访问其元素?

Pet*_*háč 2 java arrays initialization

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

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

Object[] objects = { new Object[1], new Object[34] };
Run Code Online (Sandbox Code Playgroud)

由于数组是对象,因此可以将对象数组粘贴到对象数组中.你可以很容易地得到在一个或另一个对象数组做objects[0]objects[1],但你会在哪里从那里去?你如何从存储在下面的对象数组中访问第16个对象objects[1]

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

Object o = new Object[100];
Run Code Online (Sandbox Code Playgroud)

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

Ted*_*opp 10

一个Object[]也是一个Object,这就是为什么你的声明

Object o = new Object[100];
Run Code Online (Sandbox Code Playgroud)

作品.*但是,要访问元素,您需要将其强制转换为Object[].例如:

Object elt = ((Object[]) o)[3];
Run Code Online (Sandbox Code Playgroud)

对于您的原始声明:

Object[] objects = { new Object[1], new Object[34] };
Run Code Online (Sandbox Code Playgroud)

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

Object elt = ((Object[]) (objects[1]))[15];
Run Code Online (Sandbox Code Playgroud)

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

Object[][] objects = { new Object[1], new Object[34] };
Run Code Online (Sandbox Code Playgroud)

首先.然后就可以了objects[1][15].

*请注意,这只是真实的Object,它具有特殊状态作为Java中对象层次结构的根.一个Integer[]不能被分配给一个Integer变量.


NPE*_*NPE 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);
Run Code Online (Sandbox Code Playgroud)

这打印abc.

这很有效,因为System.out.println()很乐意接受Object.如果它需要a String,你需要另一个垂头丧气.