为什么数组元素必须具有相同的类型

Why does Array elements have to be of the same type

本文关键字:类型 数组元素 为什么      更新时间:2023-10-16

Array ds要求其所有成员具有同一时间。当试图将错误类型的对象存储到对象数组中时,Java会抛出ArrayStoreException。不记得C++做什么。

是我的理解正确,在数组中拥有相同类型的所有对象很重要,因为它可以保证通过以下两个操作通过以下两个操作访问恒定的时间元素:

1) element size * element index = offset
2) array pointer address + offset

如果对象具有不同的类型并且大小不同,则上述公式将无法使用。

因为:我们想要这样的。

我的意思是:使用Java语言的人(可能是C 相同(正在使用静态键入语言用于目的。

当这样的人开始思考时;他们通常会在"类似"事物的复数中思考。

警告:在Java中,一切都是一个对象,因此您可以随时声明对象[]并将任何内容塞入其中。字符串,数字等等。

也导致了另一个重要方面:在C 中,您的数组代表内存中的一个区域。而且您最好在该领域拥有相同大小的元素;避免数据损坏。

在Java中,数组是不是指向原始内存。

长话短说:在这种情况下,Java和C 之间存在真正的差异(人们必须理解以做出明智的决定(;然后是"语言"本身。换句话说:这不是Ruby Land,您只是将鸭子,数字,植物和Quack声音放在同一"清单"中,而无需进一步思考。

最终思想,基于上一段中的笑话:在我看来, array 是列表概念的实现,因此它是关于同一性质的事物的集合。如果您想要一系列无关的事物,我宁愿称 tuple

是的,你是对的。恒定时间随机访问所需的一切。

另外,如果要将不同的数据类型存储在单个数组中,则可以使用一系列无效指针。例如,在C 中,做

void * a[N]

a[i] = (void *)(&YourClass)

同样,在Java中使用Object[]

c 语言(和编译器(要求将元素的类型存储在数组中,原因是各种原因,例如指针算术和数组订阅(例如x[i](,默认的元素初始化初始化,处理对齐限制,...(。

int x[3] = { 1,2,3 };  // array of 3 int values, each being properly aligned concerning processor architecture;
myObjectType objs[10]; // array of 10 objects of type myObjectType, each being default initialised (probably the default constructor), each being properly aligned
myObjectType *objs[10]; // array of 10 pointers to objects of type myObjectType (including subclasses of myObjectType; allowing dynamic binding and polymorphism). Note: all pointers have the same size, the object to which they point may differ insize.
int *intptr = x;
bool isEqual= (intptr[2] == x[2]); // gives true
intptr += 2; // increases the pointer by "2*sizeof(int)" bytes.

所以,是的,您是对的:一个原因是因为计算偏移;但是还有其他原因,还有其他问题,例如对齐,对指针衰减的数组,默认的初始化逻辑可能更微妙,但也很重要。