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

2022-09-01 21:31:08

我有以下代码行:

suffix = suffix.isEmpty() ? "1" : Integer.toString(Integer.parseInt(suffix)+1);

在后缀已声明为空字符串 () 的块中。该块正在查找重复的文件名,并在任何重复项上添加一个数字,以便它们不再具有相同的名称。""

上面的代码行编译得很好,但是如果我把它改成这个,

suffix = suffix.isEmpty() ? "1" : Integer.toString(Integer.parseInt(suffix)++);

我得到.既然返回和 int,为什么我不能使用运算符?Invalid argument to operation ++/--Integer.parseInt()++


答案 1

运算符应更新其参数的值,因此该参数应在内存中具有要更新的固定位置。因此,参数应为变量*。在本例中,参数为 ,根本没有要更新的固定内存地址。++Integer.parseInt(suffix)

直观地说,大致相当于 。但只是一个整数值,不与内存中的固定位置相关联,因此上面的代码几乎是相同的,让我们说,.由于您不能将新值赋给(也不能赋给 ),因此支持运算符没有任何意义。Integer.parseInt(suffix)++Integer.parseInt(suffix) = Integer.parseInt(suffix) + 1Integer.parseInt(suffix)32 = 32 + 132Integer.parseInt(suffix)++

好消息是,这根本不会引起任何问题!而不是 ,请写 。Integer.parseInt(suffix)++Integer.parseInt(suffix)+1

* 或者,通常称为 l 值地址值


答案 2

++ 需要一个 lvalue(一个可赋值)。

Integer.parseInt(suffix)不是左值。

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