Around 3 decades ago when started with BASIC, Pascal&#x2F;Delphi 1-based index was pretty much the norm and off-by-1 mistakes were significantly more dominant.<p>Switching to zero based index Java&#x2F;Javascript&#x2F;C felt a lot more natural (no need for upper bound, always include-&gt;exclusive when it comes to bounds). Many algorithms benefit greatly from as well (hashtables + bitwise AND, for instance)<p>Virtually I do not recall making off-by-one errors while working with Java. Whilst it could be attributed to personal experience, the loops construct &quot;for (int i=0; i&lt;length; i++)&quot; or &quot;for(int i=length; i--&gt;0;)&quot; appear quite intuitive. Strict bounds (i.e. &lt; or &gt;) feel more elegant as well.<p>Seeing, using both type of indexing, 0-based one would a winner by large margin in my book.