После просмотра Благодаря реализации Java Integer.parseInt() я заметил, что символ точки ('.') не является допустимым символом, что заставило меня подумать, что попытка преобразовать строку приведет к ошибке; Я был прав, согласно ошибке, указанной в приведенном ниже коде.
Есть ли конкретная причина выбора дизайна, по которой нельзя преобразовать «Integer.MAX_VALUE» в значение int Integer.MAX_VALUE ? Это уязвимость интерпретации строк «выполнение входных данных как кода»? Это недосмотр?
Примечание. Эта проблема также возникает с «Integer.MIN_VALUE»
// FAILS TO COMPILE
public class Main
{
public static void main(String[] args) {
String s = "Integer.MAX_VALUE";
int i = Integer.parseInt(s);
}
}
// Exception ...: For input String: "Integer.MAX_VALUE"
// at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
// at java.base/java.lang.Integer.parseInt(Integer.java:652)
// at java.base/java.lang.Integer.parseInt(Integer.java:770)
// SUCCESSFUL WORKAROUND (focusing on the non-boilerplate code)
//
Код: Выделить всё
if(distance_str == "Integer.MAX_VALUE"){ distance = Integer.MAX_VALUE;}
else{ distance = Integer.parseInt( distance_str );}
Подробнее здесь: [url]https://stackoverflow.com/questions/79131989/why-does-using-integer-parseint-on-string-integer-max-value-fail[/url]