在提出这个问题时我有点尴尬,但以下代码片段的结果让我感到难过:
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
。
答案 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;
也会产生相同的输出。