(可能奇怪)长增量行为?

问题描述 投票:0回答:4

我问这个问题有点尴尬,但是下面代码片段的结果让我难住了:

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

java long-integer increment
4个回答
14
投票

后缀

++
运算符返回 old 值(递增之前)。您想使用前缀
++
:

final long oldValue = resultResponses++;
final long newValue = ++resultResponses;

3
投票

因为增量会在分配后增加值(后增量)。这正是 resultResponses++

 应该做的。
如果希望resultResponses为1,则需要使用
Pre-Increment,即++resultResponses

    


2
投票
如果您想在赋值之前增加 oldValue,则必须在变量之前放置

++

final long newValue = ++resultResponses;
这意味着增量发生在语句执行之前而不是之后。


1
投票
请参阅

this,了解 postfix

prefix
 的工作原理。
正如上面的答案中提到的,您可以使用这个:

final long oldValue = resultResponses; final long newValue = ++resultResponses;
或者为了让它更漂亮,你也可以使用:

final long oldValue = resultResponses++; final long newValue = resultResponses;
这也会产生相同的输出。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.