Pourquoi est “hors de portée” ne sont pas jetés pour 'substring(startIndex, endIndex)'

En Java, je suis en utilisant le substring() méthode et je ne suis pas sûr de savoir pourquoi il n'est pas à jeter un "hors de l'indice d'erreur".

La chaîne abcde a l'index de démarrage de 0 à 4, mais le substring() méthode prend startIndex et endIndex que les arguments basés sur le fait que je peux appeler foo.substring(0) et d'obtenir "abcde".

Alors pourquoi ne substring(5) de travail? Cet indice devrait être hors de portée. Quelle est l'explication?

/*
1234
abcde
*/
String foo = "abcde";
System.out.println(foo.substring(0));
System.out.println(foo.substring(1));
System.out.println(foo.substring(2));
System.out.println(foo.substring(3));
System.out.println(foo.substring(4));
System.out.println(foo.substring(5));

Ce code affiche:

abcde
bcde
cde
de
e
     //foo.substring(5) output nothing here, isn't this out of range?

Lorsque je remplace 5 à 6:

foo.substring(6)

Puis j'obtiens l'erreur:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
    String index out of range: -1
InformationsquelleAutor masato-san | 2010-07-13