Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (可能奇怪的)长增量行为?_Java_Long Integer_Increment - Fatal编程技术网

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

Java (可能奇怪的)长增量行为?,java,long-integer,increment,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 valu

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

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

后缀
++
操作符返回旧的值(在递增之前)。您想使用前缀
++

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

如果要在赋值之前增加oldValue,则必须将
++
置于变量之前:

final long newValue = ++resultResponses;

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

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

参考,以了解
后缀和
前缀的工作原理。
如上述答案所述,您可以使用:

final long oldValue = resultResponses;
final long newValue = ++resultResponses;
或者,为了使其更美观,您还可以使用:

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

这也将导致相同的输出。

可能的重复-可能不是最好的重复,但实际上有数百个。请搜索“[java]后期增量”。@Mat,是的,我的错。如果可能的话,我希望其他人投票结束这个问题,作为一个重复。这是一个令人沮丧的问题。出于某种原因,我认为将后缀运算符赋给变量会迫使该操作返回新值:/为什么是个无赖?这就是后缀和前缀
++
的定义:后缀增加变量并返回旧值,为什么前缀增加变量并返回新值。如果您想要后者,请使用前缀而不是后缀
++
。这太疯狂了。我知道至少5种其他语言,其中number++会立即返回新值。我想知道为什么它在Java中不起作用。谢谢你们学习了一些东西new@DavidFari真的吗?java继承了C++和C++的这种行为,也在C语言和JavaScript中继承了同样的工作方式。所以这不是Java特有的东西。