Because:
- Java is based on C, and C does it this way
- It makes the code cleaner: If you want to capture to end of object, pass
object.length
(however the object implements this, eg size() etc) into the toIndex parameter - no need to add/subtract 1
For example:
String lastThree = str.substring(str.length() - 3, str.length());
This way, it is very obvious what is happening in the code (a good thing).
EDIT An example of a C function that behaves like this is strncat
from string.h
:
char *strncat(char *dest, const char *src, size_t n);
The size_t
parameter's value corresponds to the java endPosition
parameter in that they are both the length of the object, but counting from 0 if they are the index, it would be one byte beyond the end of the object.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…