Почему 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, почему я не могу использовать оператор ++
?
Ответы
Ответ 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
вместо этого.