作者:手机用户2502851955 | 2023-08-29 18:28
在Java的其他任何地方,索引的任何东西都从0开始.这里是否有改变的原因或者这只是糟糕的设计?
1> erickson..:
从历史上看,数据库对绑定参数使用了基于1的索引.这可能反映了集合论和数学中关系数据库的起源,它们以1开头的索引元素,并使用零来表示空集或空集.
在shell脚本和正则表达式中,零索引通常意味着"特殊".例如,在shell脚本的情况下,第0个"参数"实际上是被调用的命令.
JDBC的选择是刻意的,但最终可能会导致比它解决的更多混乱和困难.
使用基于0的索引的好处是:你可以使用包含连续`N`元素的区间作为`[0,N)`和`[N,2N)`,`[2N,3N)`等等等等.因此,所有主流语言(如C,C++,Java,JavaScript,Python)都使用最初在C编程语言中使用的基于0的索引约定.这个原则也适用于像`[a,b)`这样的通用索引,其中`a`是包含的,而`b`是独占的.
我不认为从零开始的索引是一种数学假象.我有的每一本线性代数书都开始使用1. FORTRAN编号行/列,默认为1,如果我没记错的话.我认为从零开始的索引是C和指针算法的遗留问题.
就个人而言,我认为基于0的索引是C指针算术的回归,它似乎已经卡住了...我们所有人的不幸.
2> Steve B...:
这是原始语言设计者清除弱者的情节的一部分.在原始规范中,数组从-1开始编号,而包含1个元素的列表返回长度= 0.
今天,只有java Calendar API仍然来自这个恶魔般的情节.