Скажем есть такой код:
for (int i = 0; i < value.length(); i++) {
char currChar = value.charAt(i);
... // i ниже не изменяется
}
...
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
Логично выбросить проверку из charAt, зачем она нужна? Делают ли это современные JIT'ы для подобных ситуаций? Более того, подгружаясь в код стандартных классов подобных проверок +100500... И я как понимаю, под капотом, к этим проверкам добавляется проверка на выход индекса за границы массива. Т.е. в данном месте:
Докидывается еще одна невидимая проверка с выбросом ArrayIndexOutOfBoundsException. Это безобразие и правда попадает в рантайм? Или современные JIT'ы выкидывают большую часть подобных перепроверок для стандартных классов типа String, ArrayList и т.д.?