为什么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,为什么我不能使用++运算符?

++运算符应更新其参数的值,因此参数应在内存中具有固定位置以进行更新。 因此,参数应该是变量*。 在这种情况下,参数是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值地址值

++需要左值(可赋值)。

Integer.parseInt(suffix)不是左值。

请注意, i++i+1

编写i ++是i = i + 1的捷径; 如果你“用英语阅读”,你会把它读作“我成为i加一的当前价值”

这就是3 ++没有意义的原因你不能说3 = 3 + 1(读为3变为3加1的当前值):-)

int是一个右值。 由于它未绑定到变量,因此无法使用后增量。

++期望一个可赋值,即一个变量。 Integer.parseInt返回无法分配的值。 如果您需要一个加1的值,请改用Integer.parseInt(suffix)+1