我有以下代码行:
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,为什么我不能使用++
运算符?
答案 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
。