O método Substring na classe String atinge o índice que não deveria duplicar
Esta pergunta já tem uma resposta aqui:
Por que "fora do intervalo" não é lançado para 'substring (startIndex, endIndex)' 6 respostasPeço desculpas se o título não estiver claro.
Agora, no índice de strings começa em 0. Então, por exemplo:
Index 0 1 2 3 4
String H E L L O
Nesse caso, o último índice é 4.
Se eu tentasse fazer algo assim:
System.out.println("hello".charAt(5));
Ele lançaria uma 'exceção de índice fora dos limites', como deveria.
No entanto, se eu tentar executar o seguinte código:
System.out.println("hello".substring(5));
Corre! Escrevi código semelhante, notei isso mais tarde e não consegui descobrir.
Eventualmente, a pergunta é: como isso é possível para alcançarmos esse índice? Permite escrever:
stringObj.substring(stringObj.length());
e não parece muito seguro, pois stringObj.length () nos retorna um número inteiro mais um do que o último índice.
É feito intencionalmente e isso tem um propósito? Em caso afirmativo, qual é esse objetivo e qual é o benefício que ele traz?