processmaker - ¿Por qué no funciona Integer.parseInt("1")++ en Java?
processmaker doc (5)
Tengo la siguiente línea de código:
suffix = suffix.isEmpty() ? "1" : Integer.toString(Integer.parseInt(suffix)+1);
en un bloque donde el sufijo ya se ha declarado como una Cadena vacía ( ""
). El bloque busca nombres de archivos duplicados y agrega un número a cualquier duplicado para que ya no tengan el mismo nombre.
La línea de código de arriba compila bien, pero si la cambio a esto,
suffix = suffix.isEmpty() ? "1" : Integer.toString(Integer.parseInt(suffix)++);
Obtengo un Invalid argument to operation ++/--
. Dado que Integer.parseInt()
devuelve e int, ¿por qué no puedo usar el operador ++
?
++ requiere un lvalue (un valor asignable).
Integer.parseInt(suffix)
no es un lvalue.
Tenga en cuenta que i++
no es lo mismo que i+1
.
El int
es un valor. Dado que no está vinculado a una variable, no puede utilizar el incremento posterior.
El operador ++
debe actualizar el valor de su argumento, por lo que el argumento debe tener una posición fija en la memoria que se actualizará. Por esta razón, el argumento debe ser una variable *. En este caso, el argumento es Integer.parseInt(suffix)
, no tiene una dirección de memoria fija para actualizar en absoluto.
Intuitivamente, Integer.parseInt(suffix)++
es aproximadamente equivalente a Integer.parseInt(suffix) = Integer.parseInt(suffix) + 1
. Pero Integer.parseInt(suffix)
es solo un valor entero, no asociado a una posición fija en la memoria, por lo que el código anterior es casi lo mismo que, digamos, 32 = 32 + 1
. Dado que no puede asignar un nuevo valor a 32
(ni a Integer.parseInt(suffix)
), no tiene sentido dar soporte al operador ++
.
¡La buena noticia es que esto no causa ningún problema en absoluto! En lugar de Integer.parseInt(suffix)++
, escriba Integer.parseInt(suffix)+1
.
* O, como se suele llamar, un l-value , o un valor de dirección .
Escribir i ++ es un atajo para i = i + 1; si tuviera que ''leerlo en inglés'', lo leería como "i se convierte en el valor actual de i más uno"
por lo que 3 ++ no tiene sentido, realmente no se puede decir que 3 = 3 + 1 (leer como 3 se convierte en el valor actual de 3 más uno) :-)
++
espera un valor asignable, es decir, una variable. Integer.parseInt
devuelve un valor que no se puede asignar. Si necesita un valor más uno, use Integer.parseInt(suffix)+1
lugar.