我问这个问题有点尴尬,但是下面代码片段的结果让我难住了:
System.out.println("incrementResultResponses() has been invoked!");
final long oldValue = resultResponses;
final long newValue = resultResponses++;
System.out.println("Old value = " + oldValue);
System.out.println("New value = " + newValue);
输出以下内容:
incrementResultResponses() has been invoked!
Old value = 0
New value = 0
为什么?并发会对这里的结果产生任何影响吗?顺便说一句,
resultResponses
是一个long
。
后缀
++
运算符返回 old 值(递增之前)。您想使用前缀 ++
:
final long oldValue = resultResponses++;
final long newValue = ++resultResponses;
因为增量会在分配后增加值(后增量)。这正是 resultResponses++
应该做的。如果希望resultResponses为1,则需要使用
++resultResponses
++
:
final long newValue = ++resultResponses;
这意味着增量发生在语句执行之前而不是之后。
this,了解 postfix
和
prefix
的工作原理。 正如上面的答案中提到的,您可以使用这个:
final long oldValue = resultResponses;
final long newValue = ++resultResponses;
或者为了让它更漂亮,你也可以使用:
final long oldValue = resultResponses++;
final long newValue = resultResponses;
这也会产生相同的输出。