вам стоит использовать debug, чтобы понять, как это работает
public int indexOf(int ch, int fromIndex) {
final int max = value.length;
if (fromIndex < 0) {
fromIndex = 0;
} else if (fromIndex >= max) {
// Note: fromIndex might be near -1>>>1.
return -1;
}
if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
// handle most cases here (ch is a BMP code point or a
// negative value (invalid code point))
final char[] value = this.value;
for (int i = fromIndex; i < max; i++) {
if (value[i] == ch) {
return i;
}
}
return -1;
} else {
return indexOfSupplementary(ch, fromIndex);
}
}
Ваша строка str преобразуется в массив символов ( final char[] value = this.value;)
А char - это число. Проще говоря, вы сравниваете код символа со своим числом
Протестировать легко
Возьмите свою строку 1223242434262445262644283 и выведите indexOf(49) - это символ единицы
Получите 0 - индекс в строке
public static void main(String[] args) {
String str = "1223242434262445262644283";
System.out.println(str.indexOf(50)); //1, потому что '2' == 50
}
А для того, чтобы получить индекс подстроки, нужно max привести к строке
public static void main(String[] args) {
String str = "1223242434262445262644283";
System.out.println(str.indexOf("23")); //2 - здесь работает другая реализация метода indexOf
}