Java中的数组是否为对象有什么原因吗?
答案 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)
这样他们就可以获得所有好处:
等
并且数组不是“原始的”,所以如果它们不能是原始的,它们必须是对象。
答案 6 :(得分:0)
我不确定官方的原因。
然而,我认为它们是对象是有意义的,因为可以对它们执行操作(例如取长度),并且将这些操作作为成员函数支持更有意义,而不是引入新的关键字。其他操作包括clone(),对象的继承操作等。数组也是可清除的并且可能具有可比性。
这与C(和C ++中的本机数组)不同,其中数组本质上是指向内存偏移量的指针。