1

我不明白解析时括号[]在这段代码中到底做了什么Integer[]new Objects

 private Integer data[]=(Integer[]) new Object[10];//works fine

 private Integer data[]=(Integer) new Object[10];//error
4

6 回答 6

3

private Integer data[]=(Integer) new Object[10]; //I'm a C programmer :)!

等同于:

private Integer[] data=(Integer) new Object[10];

现在您可以更好地看到这data是一个s数组Integer

data是 type ,如果左侧变量的类型是Integer[],则不能new Object[10];转换为。IntegerInteger[]

于 2013-07-20T10:04:01.180 回答
2

我将为您阅读代码:

第 1 行:

  • new Object[10]- 为 Object 实例的 10 个引用创建一个新数组。完成后,引用全部为空。
  • (Integer []) ...- 告诉编译器它应该假定 Object 引用数组实际上是 Integer 引用数组,即对 Integer 实例的引用数组。
  • private Integer data [] = ...- 将我们刚刚创建的数组保存在一个名为 data 的私有引用变量中,并假设 data 引用一个整数数组。

第 2 行:

  • (Integer)- 告诉编译器对 Object 实例数组进行一个整数引用。那是做不到的,因为没有办法将一个数组只变成一个对象。

总结一下:

X []中的括号表示对 X 的引用数组

并且(Y) foo读取假定 foo 实际上是类型 Y 的实例

于 2013-07-20T10:14:45.320 回答
0

对象数组必须强制转换为Integer[]Integer

于 2013-07-20T10:05:01.300 回答
0

您正在尝试data在第一种情况下创建数组实例。但是,在第二种情况下,您试图将数组分配给Integer而它期望它是一个数组。

于 2013-07-20T10:05:54.477 回答
0

变量的类型dataInteger[](整数数组)。如果您使用声明数组的传统样式会更清楚:

private Integer[] data = ...

因此,第一行将表达式转换为变量 ( Integer[]) 的类型,而第二行将其转换为Integer,这不是 的类型data,因此编译错误。

请注意,第二行虽然可以编译,但没有多大意义。你应该简单地使用

private Integer[] data = new Integer[10];
于 2013-07-20T10:06:04.133 回答
0

它将对象数组转换为整数数组以允许分配。

于 2013-07-20T10:06:25.477 回答