今天有同事问我说,为什么java数组的下标是从0开始呢?这让我想起来从小白开始学习java的时候,在学习数组和集合的时候,老师说一定要记住啊,他们的下标要从0开始。随着写的代码多了,这也就成了想当然,感觉就应该从0开始,哈哈。
    首先我们先看个问题,假如有这么一串连续的自然数 1 2 3 4 5 6 7 8 9 10 ,让我们用数学不等式表示出来,那么显然我们可以这样表示:

a.  1<=i<11
b.  0<i <=10
c.  1<=i<=10
d.  0<i<11

    那在a、b、c、d中应该选择哪一个呢?是不是不好选,哈哈。但我们观察这四个不等式可以观察到,其中a和b有个突出的有点,就是不等式的边界之差正好等于这串连续整数的个数(长度),所以我们有理由首先选择a和b。
    那么a和b之间,谁又是最优的呢?
    我们可以看到,对于a,不等式的下边界等于这个连续的自然数的最小值,对于b,不等式的右边界等于这个连续的自然数的最大值。好的,那我们下面如果把这个连续的自然数 改为 0 1 2 3 4 5 6 7 8 9的时候,那么:

a 不等式就变成了 0<=i<10
b 不等式就变成了 -1<i<=9

    这时按照b这个不等式,下边界变成了-1,是个负数,不是自然数,显然a这个不等式更加的优雅,因为自然数的下边界还是自然数。

    好,那么我们下面就看下为什么下标也使用0开始。
按照等式a的规则:

当下标从1开始的时候,下标的范围1<=i<n+1;
当下标从0开始的时候,下标的范围0<=i<n;

    从上面这两个分析我们看到,以0为开始的时候,元素的下标就等于数组中它前面的元素的个数(长度)。