Почему использование Integer.parseInt для строки «Integer.MAX_VALUE» не работает?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему использование Integer.parseInt для строки «Integer.MAX_VALUE» не работает?

Сообщение Anonymous »

Я читал значения из файла, где Integer.MAX_VALUE (как текст из текстового файла) использовался вместо, казалось бы, случайного, странно большого числа, чтобы указать бесконечную стоимость в алгоритме поиска по графу. Мне нужно преобразовать строку «Integer.MAX_VALUE» в int, поэтому я попытался использовать для нее метод Integer.parseInt().
После просмотра реализации 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему использование Integer.parseInt для строки «Integer.MAX_VALUE» не работает?
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Почему использование Integer.parseInt для строки «Integer.MAX_VALUE» не работает?
    Anonymous » » в форуме JAVA
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Почему использование Integer.parseInt для строки «Integer.MAX_VALUE» не работает?
    Anonymous » » в форуме JAVA
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Почему .max (Integer :: max) и .min (Integer :: min) компилируют на потоке Java 8?
    Anonymous » » в форуме JAVA
    0 Ответы
    118 Просмотры
    Последнее сообщение Anonymous
  • Почему .max (Integer :: max) и .min (Integer :: min) компилируют на потоке Java 8?
    Anonymous » » в форуме JAVA
    0 Ответы
    102 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»