为什么Java中的数组索引从0开始?

Sha*_*wal 7 java arrays

为什么在Java这样的编程语言中,数组索引使用0而不是1?我是java的新手,欢迎任何解释.

Bri*_*ian 22

为了扩展@ Kevin的答案,我从Programmers.SE答案中引用这句话:

数组中的索引实际上不是索引.它只是一个偏移量,即距离数组开始的距离.第一个元素位于数组的开头,因此没有距离.因此偏移量为0.

此外,如果您想了解有关不同语言如何进行数组索引的更多信息,请查看维基百科上的详尽列表.


Kev*_*vin 18

Java使用从零开始的索引,因为c使用从零开始的索引.C使用从零开始的索引,因为数组索引只不过是一个内存偏移量,因此数组的第一个元素位于它已经指向的内存中*(array+0).


kap*_*pex 9

Dijkstra的一句话,来自为什么编号应该从零开始(1982):

当处理长度为N的序列时,我们希望通过下标区分其中的元素,下一个令人烦恼的问题是要分配给其起始元素的下标值.用下标1开始时附着于约定)的产率,中,下标范围1≤ < Ñ 1; 从0开始,然而,给出了更好的范围0≤ < Ñ.因此,让我们让我们的序数从零开始:元素的序数(下标)等于序列中它前面的元素数.这个故事的寓意是,在所有这几个世纪之后,我们更好地考虑了 - 零作为最自然的数字.

关于这篇文章的讨论可以在Lambda the Ultimate中找到- 为什么编号应该从0开始.

  • @staticx他可能会给出与Knuth相同的答案:http://xkcd.com/163/ (3认同)
  • 有趣的报价.下标从1开始,下标范围等于"1 <= i <= N",因此Dijkstra的论证并不特别令人信服. (2认同)
  • 这只是一个意见.唯一真正的答案是"因为语言是这样设计的". (2认同)