Подтвердить что ты не робот

Почему Integer.parseInt( "1" ) ++ не работает в Java?

У меня есть следующая строка кода:

suffix = suffix.isEmpty() ? "1" : Integer.toString(Integer.parseInt(suffix)+1);

в блоке, где суффикс уже объявлен как пустая строка (""). Блок ищет дубликаты имен файлов и добавляет число для любых дубликатов, чтобы они не имели того же имени.

Строка кода выше компилируется отлично, но если я ее изменю,

suffix = suffix.isEmpty() ? "1" : Integer.toString(Integer.parseInt(suffix)++);

Я получаю Invalid argument to operation ++/--. Поскольку Integer.parseInt() возвращает и int, почему я не могу использовать оператор ++?

4b9b3361

Ответ 1

Оператор ++ должен обновить значение своего аргумента, поэтому аргумент должен иметь фиксированную позицию в памяти для обновления. По этой причине аргумент должен быть переменной *. В этом случае аргумент Integer.parseInt(suffix), не имеет фиксированного адреса памяти для обновления вообще.

Интуитивно, Integer.parseInt(suffix)++ примерно эквивалентен Integer.parseInt(suffix) = Integer.parseInt(suffix) + 1. Но Integer.parseInt(suffix) - это целое число, не связанное с фиксированной позицией в памяти, поэтому приведенный выше код почти то же самое, скажем, 32 = 32 + 1. Поскольку вы не можете назначить новое значение 32 (ни к Integer.parseInt(suffix)), то нет смысла поддерживать оператор ++.

Хорошей новостью является то, что это не вызывает никаких проблем! Вместо Integer.parseInt(suffix)++ напишите Integer.parseInt(suffix)+1.

* Или, как его обычно называют, l-value или значение адреса.

Ответ 2

++ требует lvalue (присваиваемое значение).

Integer.parseInt(suffix) не является значением l.

Обратите внимание, что i++ не совпадает с i+1.

Ответ 3

int - значение r. Поскольку он не связан с переменной, вы не можете использовать пост-инкремент.

Ответ 4

Запись я ++ является ярлыком для я = я + 1; если вы хотите "прочитать его по-английски", вы прочитаете его как "i станет текущим значением я плюс один"

поэтому 3 ++ не имеет смысла, вы не можете сказать 3 = 3 + 1 (считайте, что 3 становится текущим значением 3 плюс один):-)

Ответ 5

++ ожидает назначаемое значение, то есть переменную. Integer.parseInt возвращает значение, которое невозможно присвоить. Если вам нужно значение плюс один, используйте Integer.parseInt(suffix)+1 вместо этого.