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

时间:2014-07-19 13:59:43

标签: java arrays

为什么数组索引用0完成,而不是像Java这样的编程语言用1做? 我是java的新手,欢迎任何解释。

6 个答案:

答案 0 :(得分:20)

要展开@Kevin's answer,我会从answer on Programmers.SE

中引用此引文
  

数组中的索引实际上不是索引。这只是一个偏移   这是从数组开始的距离。第一个要素是   在数组的开头,所以没有距离。因此   offset是0。

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

答案 1 :(得分:15)

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

答案 2 :(得分:8)

Dijkstra的引文,来自Why numbering should start at zero (1982)

  

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

有关本文的讨论可以在Lambda the Ultimate - Why numbering should start at 0中找到。

答案 3 :(得分:3)

我已经在下图中给出了这个问题的答案,我已经写了一张不言自明的论文

主要步骤:

  1. 创建参考
  2. 数组的实例
  3. 将数据分配到数组

----------

  • 还请注意仅在实例化数组时...。零分配给 默认情况下,所有块都将保留,直到我们为其分配值为止
  • 数组从零开始,因为第一个地址将指向 参考(i:e-图片中的X102 + 0)

enter image description here

注意:图像中显示的块是内存表示形式

我还发布了此答案here

答案 4 :(得分:0)

C之类的编程语言只是高级汇编程序的所有遗产。编程小牛花了他们精彩的生活做指针算术,所以它成为他们从零开始计算的第二天性。现在,他们将这一遗产传递给许多现代语言。 您甚至可以将语句读作"零是最自然的数字。"。零不是自然数。在现实生活中,人们不会从零开始算数,数学家不会,物理学家不会,统计学家不会从零开始计算......它只是计算机科学。

此外,你不会说"我没有苹果"表达你没有任何苹果的事实,否则按照相同的逻辑,你会说"我没有减去一个苹果"表达你有一个苹果的事实:P

答案 5 :(得分:0)

总结他的论点:

当处理自然数的子序列时,上限和下限之间的差应为子序列的长度。数组的索引可以被认为是这种子序列的一种特殊类型。 下限应为包含性,上限应为排除性。换句话说,下限应该是数组的第一个索引。否则,对于某些子序列,我们冒着将非自然数的下限限制的风险。 如果要保持条件(1)和(2),则实际上我们有两个上限和下限选择:1 <= i