这个问题绝对不是重复的,因为我没有提到一般的post/precrement评估,但是专门针对在lambda表达式中使用增量,这是明显不同的。每个人都可以自由地确认代码只会在您通常期望变量值增加的位置返回零。没有答复已发布到此。后缀与lambda表达式的前缀增量
我很清楚post-和prefix前后递增的变化评估和递增时刻。不过,我不明白为什么这个只返回零:
Stream.iterate(0, e -> e++)
.limit(10)
.forEach(System.out::println);
当检查这一点,我认为电子第一次迭代时被初始化为0,然后递增。所以第二次迭代应该产生e = 1,但显然它不会。我错过了什么?
另外,如果我扭转的增加,它的工作原理像预想的那样,从0到9,列出所有的数字:
Stream.iterate(0, e -> ++e)
.limit(10)
.forEach(System.out::println);
看起来像是错过了'e ++'返回'e'的_previous_值,当'++ e'返回更新值时。所以'e - > e ++'实际上等同于'e - > e'。 – Tunaki
我不认为这是“后增量和增量前操作员如何工作?”的副本。 AdHominem的问题不在于他/他不明白“e ++”是否评估为“e”的旧值;这是他/他不明白为什么它评估的是什么,而不是“e”之后的价值,这很重要。 –
@GarethMcCaughan相关问题解释说。例如这个答案http://stackoverflow.com/a/2371162/1743880 – Tunaki