Почему это не вызывает ошибку indexoutbounds в java

#java

Вопрос:

На яве,

 String s = "a";
String ss = s.substring(1);
System.out.println(ss.length());
 

Мне было интересно, почему код не вызывает ошибки, и результат показывает, что длина строки ss равна 0.

Комментарии:

1. Хабе вы читали документацию String::substring ?

2. String t = ""; это законно. Пустое String существует.

Ответ №1:

Ваша строка "a" содержит только 1 символ в позиции 0 , поэтому substring(int) вы должны передать первую позицию, с которой будет начинаться новая строка, пока она не закончится. Вы прошли 1 , но 1 в этой строке нет символа с позицией, но вы не получите исключения, потому что эта функция вернет пустую строку вместо исключения. Если вам нужно исключение, просто проверьте длину строки:

Читайте документы: https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/String.html#substring(инт)

Ответ №2:

Пожалуйста, ознакомьтесь с документацией: https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/String.html#substring(int)

Это вызовет исключение IndexOutOfBoundsException — если значение beginIndex отрицательное или больше длины этого строкового объекта.

длина строки переменной «s» равна 1, и здесь вы ставите beginIndex=1, что не больше длины строки. Вот почему он не делает никаких исключений. Попробуйте использовать beginIndex=2, вы получите исключение IndexOutOfBoundException.