首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中的对象类型和引用数组

Java中的对象类型和引用数组
EN

Stack Overflow用户
提问于 2012-10-07 07:57:28
回答 5查看 8.5K关注 0票数 15
代码语言:javascript
复制
public class RefMix {
  public static void main(String[] args) {
    Object[] a = {null, "foo"};
    Object[] b = {"bar", b};
    a[0] = b;

    System.out.println(a[0][0]);
  }
}

我的理解是,数组是Java中的对象,因此是Object类型的子类。我的进一步理解是,二维数组是作为数组引用的数组实现的。因此,我不明白为什么我的a不能在上面的代码中生成bar。相反,它不会编译:

代码语言:javascript
复制
RefMix.java:7: array required, but java.lang.Object found
EN

回答 5

Stack Overflow用户

发布于 2012-10-07 08:00:10

对象实例的运行时类型与静态推断的类型不同。编译器将尝试估计程序中每个变量的类型,以便及早捕获某些类型的错误。在这种情况下,a[0]将始终是一个数组,但是编译器不知道这一点。由于是从对象数组中获取对象,因此编译器只知道a[0]是一个对象。因此,它会引发错误。

如果你知道某些东西总是某种类型,但是编译器不能识别它,你可以通过插入一个显式类型转换来解决这个问题。

代码语言:javascript
复制
System.out.println(((Object[])a[0])[0]);
票数 10
EN

Stack Overflow用户

发布于 2012-10-07 08:01:07

因为在Java中数组是一个对象,所以第一次和第二次赋值会将数组存储为对象数组的第一个元素。

代码语言:javascript
复制
Object[] a = {null, "foo"};
Object[] b = {"bar", b};

现在,您已经将a对象数组的第一个元素更改为包含值b而不是数组。但因为它是一个对象数组。从它出来的一切都将是对象..

因为a是一个对象..所以,你显然不能访问这样的东西:-

代码语言:javascript
复制
System.out.println(a[0][0]);

您可以尝试将对象a类型转换为对象数组..:-

代码语言:javascript
复制
System.out.println(((Object[])a[0])[0]);
票数 4
EN

Stack Overflow用户

发布于 2012-10-07 08:02:06

执行以下操作:

代码语言:javascript
复制
System.out.println(((Object[])a[0])[0]);

这将在运行时将对象“强制转换”为对象数组。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12764931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档