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

时间:2012-02-06 13:38:41

标签: java long-integer increment

在提出这个问题时我有点尴尬,但以下代码片段的结果让我感到难过:

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

为什么呢?并发会对结果有什么影响吗?顺便说一下,resultResponseslong

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:3)

因为增量会增加之后的值(后增量)。这正是resultResponses++应该做的事情 如果您希望resultResponses为1,则需要使用预增量,即++resultResponses

答案 2 :(得分:2)

如果要在分配前增加oldValue,则必须在变量前放置++

final long newValue = ++resultResponses;

这意味着增量发生在执行语句之前而不是之后。

答案 3 :(得分:1)

参考this,了解spring: # Set here configurations for the database connection datasource: jndi-name: java:jboss/datasources/bc-appli-as400-ds jpa: show-sql: true postfix的工作原理。 如上面的答案中所述,您可以使用:

prefix

或者为了让它变得更加漂亮,你也可以使用:

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

也会产生相同的输出。