Насколько я понимаю, Java Строки - это просто массив символов, с максимальной длиной, являющейся целочисленным значением. Если я правильно понимаю этот ответ , возможно вызвать переполнение строкой - хотя в " необычные обстоятельства ".
Поскольку Java Строки основаны на массивах символов и Java автоматически проверяет границы массивов, переполнение буфера возможно только в необычном сценарии ios:
- Если Вы вызываете нативный код через JNI
- В самой JVM (обычно пишется на C ++)
- Интерпретатор или JIT-компилятор не работают правильно (Java проверка границ с обязательным байт-кодом)
Поправьте меня, если я ошибаюсь, но я считаю, что это означает, что вы можете писать за пределами массива, без , вызывающим исключение ArrayIndexOutOfBounds
(или подобное).
Я столкнулся с проблемами в C ++ из-за переполнения буфера, и я могу найти множество советов по поводу других языков , но ни один из них конкретно не отвечает на то, что произойдет, если вы вызовете переполнение буфера с помощью String (или любой другой тип массива) в Java.
Я знаю, что Java Строки проверяются на наличие границ и не могут быть переполнены только собственным кодом Java (если проблемы не присутствуют в компилятор или JVM, в соответствии с пунктами 2 и 3 выше), но первый пункт подразумевает, что технически 1031 * возможно * привести к тому, что char [] окажется в ... нежелательной позиции.
Учитывая это У меня есть два специфических c вопроса о поведении таких проблем в Java, при условии, что вышеприведенное верно:
- Если строка может переполниться, что произойдет, если это произойдет?
- Какими будут последствия этого поведения?
Заранее спасибо.