1

我使用的是 Java 1.3,这意味着它没有原语的自动装箱。这意味着以下代码:

Vector v = new Vector();
byte b = (byte) 4;

v.addElement(b);

不编译,编译器错误:

The method addElement(Object) in the type Vector is not applicable for the arguments (byte)

所有原语都必须被包装,如下所示:

v.addElement(new Byte(b));

话虽如此,我注意到这段代码编译并运行得很好:

Vector v = new Vector();
byte[] b = new byte[]{1, 2};

v.addElement(b);

这怎么可能?我的 java 版本甚至没有集合,而且这个文档说该方法没有重载,它只需要对象。

是不是所有数组,甚至是基元数组,实际上都扩展了 Object?

4

4 回答 4

9

正如您所猜到的,所有数组,即使是仅包含基元的数组,都是Objects。它们是引用类型,它简化了 Java,使每个引用类型都成为Object.

从某种意义上说,无论数组包含什么类型,它们的行为都是相同的。“原始”是类型的属性,而不是容器的属性。

于 2012-08-25T20:42:09.340 回答
2

所有数组,包括原始类型数组,是Objects

int intArray[] = new int[5];

if (intArray instanceof Object)
    System.out.println("array is Object");
else System.out.println("array not Object");

输出:

array is Object
于 2012-08-25T20:42:33.407 回答
2

是的。 Arrays 是Objects。

来自Java 语言规范的§4.3.1

对象是类实例或数组。

于 2012-08-25T20:43:27.650 回答
1

是不是所有数组,甚至是基元数组,实际上都扩展了 Object

是的。

于 2012-08-25T20:42:28.733 回答