在Java中,为什么数组对象?有什么具体原因吗?

时间:2010-01-05 21:27:49

标签: java arrays

Java中的数组是否为对象有什么原因吗?

7 个答案:

答案 0 :(得分:9)

因为Java语言规范says so :)

  

在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2)。可以在数组上调用Object类的所有方法。

因此,与C ++不同,Java提供真正的数组作为第一类对象:

  • length个成员。
  • 有一个clone()方法可以覆盖类Object中同名方法。
  • 加上班级Object的所有成员。
  • 如果尝试访问数组越界,则抛出异常。
  • 阵列在动态内存中实现。

答案 1 :(得分:3)

让数组成为对象意味着你可以用它们进行操作(例如someArray.count('foo'))而不是仅仅对它们进行操作(例如,count(someArray,'foo')),这会导致更自然的语法。

答案 2 :(得分:1)

另一点是对象是可变的并且通过引用传递。在数组中,没有任何字段/方法可用于更改数组的“属性”,但您确定可以改变元素值。通过引用传递数组的好处非常明显(尽管函数式程序员可能希望Java具有通过值传递的不可变列表)。

编辑:忘了提。在自动装箱之前的时期,能够将数组存储在集合中,将它们写入ObjectStream等等是有帮助的。

答案 3 :(得分:1)

这个link解释了为什么数组是Java中的对象(在文章的开头)。

答案 4 :(得分:1)

可能是因为他们希望尽可能地将一切都变成对象。本机类型用于向后兼容。

答案 5 :(得分:0)

这样他们就可以获得所有好处:

  • GetHashCode()方法
  • 的toString()

并且数组不是“原始的”,所以如果它们不能是原始的,它们必须是对象。

答案 6 :(得分:0)

我不确定官方的原因。

然而,我认为它们是对象是有意义的,因为可以对它们执行操作(例如取长度),并且将这些操作作为成员函数支持更有意义,而不是引入新的关键字。其他操作包括clone(),对象的继承操作等。数组也是可清除的并且可能具有可比性。

这与C(和C ++中的本机数组)不同,其中数组本质上是指向内存偏移量的指针。