为什么Integer.parseInt(“1”)++不能在Java中工作?

时间:2011-12-16 15:20:07

标签: java integer int

我有以下代码行:

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

5 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:13)

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

Integer.parseInt(suffix)不是左值。

请注意,i++i+1不同。

答案 2 :(得分:10)

int是左值。由于它没有绑定到变量,因此无法使用后增量。

答案 3 :(得分:10)

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

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

答案 4 :(得分:8)

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