После просмотра реализации 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)
// [code to read from file and place it in a String called distance_str]
if(distance_str == "Integer.MAX_VALUE"){ distance = Integer.MAX_VALUE;}
else{ distance = Integer.parseInt( distance_str );}
- Я знаю, что первый раздел данного кода не работает и что реализация объясняет, почему; это не то, о чем я спрашиваю.
Я спрашиваю о том, почему дизайнеры решили не учитывать это, было ли это намеренно (если да, то по какой причине?) или недосмотр. Кстати, "потому что метод не говорит, что он учитывает максимальные и минимальные значения как строки" не является для меня приемлемым ответом из-за этого являющаяся тавтологией. Я спрашиваю почему это именно так, а а не как. - Кроме того, мое использование str1== str2 вместо str1.equals(str2) было ошибочным, поскольку я не собирался искать сравнение эквивалентности адресов памяти; спасибо всем, что поправили меня
Подробнее здесь: https://stackoverflow.com/questions/791 ... value-fail