为什么从指数是包容性的但最终指数是独家的?

nov*_*ice 15 java

在Java API方法中,例如:

  • String.substring(int beginIndex, int endIndex)
  • String.subSequence(int beginIndex, int endIndex)
  • List.subList(int fromIndex, int toIndex)

为什么起始索引包含但最终索引是独占的?为什么他们不应该设计包容性?

Boh*_*ian 18

因为:

  • Java基于C,而C就是这样做的
  • 它使代码更清晰:如果你想捕获到对象的结尾,传递object.length(但是对象实现了这个,例如size()等)到toIndex参数 - 不需要添加/减去1

例如:

String lastThree = str.substring(str.length() - 3, str.length());
Run Code Online (Sandbox Code Playgroud)

这样,很明显代码中发生的事情(一件好事).

编辑类似行为的C函数示例strncat来自string.h:

char *strncat(char *dest, const char *src, size_t n);
Run Code Online (Sandbox Code Playgroud)

size_t参数的值对应于在Java endPosition中,它们都是参数长度的对象,但是,如果它们是从0开始计数索引,这将是一个字节以外的物体的端部.